Significantly reduce the size of the Mass Storage class bootloader, by removing depen...
authorDean Camera <dean@fourwalledcubicle.com>
Wed, 20 Mar 2013 19:02:29 +0000 (19:02 +0000)
committerDean Camera <dean@fourwalledcubicle.com>
Wed, 20 Mar 2013 19:02:29 +0000 (19:02 +0000)
Bootloaders/MassStorage/BootloaderAPITable.S
Bootloaders/MassStorage/Lib/SCSI.c
Bootloaders/MassStorage/Lib/VirtualFAT.c
Bootloaders/MassStorage/Lib/VirtualFAT.h

index 2d7610b..7efe8b4 100644 (file)
@@ -29,7 +29,6 @@
 */\r
 \r
 #if AUX_BOOT_SECTION_SIZE > 0\r
 */\r
 \r
 #if AUX_BOOT_SECTION_SIZE > 0\r
-\r
 #warning Using a AUX bootloader section in addition to the defined bootloader space (see documentation).\r
 \r
 ; Trampoline to jump over the AUX bootloader section to the start of the bootloader,\r
 #warning Using a AUX bootloader section in addition to the defined bootloader space (see documentation).\r
 \r
 ; Trampoline to jump over the AUX bootloader section to the start of the bootloader,\r
@@ -38,7 +37,6 @@
 .global Boot_AUX_Trampoline\r
 Boot_AUX_Trampoline:\r
        jmp BOOT_START_ADDR\r
 .global Boot_AUX_Trampoline\r
 Boot_AUX_Trampoline:\r
        jmp BOOT_START_ADDR\r
-\r
 #endif\r
 \r
 ; Trampolines to actual API implementations if the target address is outside the\r
 #endif\r
 \r
 ; Trampolines to actual API implementations if the target address is outside the\r
index 3df8d30..ea0700a 100644 (file)
@@ -212,11 +212,8 @@ static bool SCSI_Command_Request_Sense(USB_ClassInfo_MS_Device_t* const MSInterf
  */
 static bool SCSI_Command_Read_Capacity_10(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo)
 {
  */
 static bool SCSI_Command_Read_Capacity_10(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo)
 {
-       uint32_t LastBlockAddressInLUN = (LUN_MEDIA_BLOCKS - 1);
-       uint32_t MediaBlockSize        = SECTOR_SIZE_BYTES;
-
-       Endpoint_Write_Stream_BE(&LastBlockAddressInLUN, sizeof(LastBlockAddressInLUN), NULL);
-       Endpoint_Write_Stream_BE(&MediaBlockSize, sizeof(MediaBlockSize), NULL);
+       Endpoint_Write_32_BE(LUN_MEDIA_BLOCKS - 1);
+       Endpoint_Write_32_BE(SECTOR_SIZE_BYTES);
        Endpoint_ClearIN();
 
        /* Succeed the command and update the bytes transferred counter */
        Endpoint_ClearIN();
 
        /* Succeed the command and update the bytes transferred counter */
@@ -237,7 +234,7 @@ static bool SCSI_Command_Read_Capacity_10(USB_ClassInfo_MS_Device_t* const MSInt
 static bool SCSI_Command_ReadWrite_10(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo,
                                       const bool IsDataRead)
 {
 static bool SCSI_Command_ReadWrite_10(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo,
                                       const bool IsDataRead)
 {
-       uint32_t BlockAddress;
+       uint16_t BlockAddress;
        uint16_t TotalBlocks;
 
        /* Load in the 32-bit block address (SCSI uses big-endian, so have to reverse the byte order) */
        uint16_t TotalBlocks;
 
        /* Load in the 32-bit block address (SCSI uses big-endian, so have to reverse the byte order) */
@@ -259,9 +256,9 @@ static bool SCSI_Command_ReadWrite_10(USB_ClassInfo_MS_Device_t* const MSInterfa
 
        /* Determine if the packet is a READ (10) or WRITE (10) command, call appropriate function */
        if (IsDataRead == DATA_READ)
 
        /* Determine if the packet is a READ (10) or WRITE (10) command, call appropriate function */
        if (IsDataRead == DATA_READ)
-         VirtualFAT_ReadBlocks(MSInterfaceInfo, BlockAddress, TotalBlocks);
+         VirtualFAT_ReadBlocks(BlockAddress, TotalBlocks);
        else
        else
-         VirtualFAT_WriteBlocks(MSInterfaceInfo, BlockAddress, TotalBlocks);
+         VirtualFAT_WriteBlocks(BlockAddress, TotalBlocks);
 
        /* Update the bytes transferred counter and succeed the command */
        MSInterfaceInfo->State.CommandBlock.DataTransferLength -= ((uint32_t)TotalBlocks * SECTOR_SIZE_BYTES);
 
        /* Update the bytes transferred counter and succeed the command */
        MSInterfaceInfo->State.CommandBlock.DataTransferLength -= ((uint32_t)TotalBlocks * SECTOR_SIZE_BYTES);
index 41c661e..e0541f4 100644 (file)
@@ -245,12 +245,10 @@ static void ReadVirtualBlock(const uint16_t BlockNumber)
 /** Writes a number of blocks to the virtual FAT file system, from the host
  *  PC via the USB Mass Storage interface.
  *
 /** Writes a number of blocks to the virtual FAT file system, from the host
  *  PC via the USB Mass Storage interface.
  *
- *  \param[in] MSInterfaceInfo  Pointer to a structure containing a Mass Storage Class configuration and state
  *  \param[in] BlockAddress     Data block starting address for the write sequence
  *  \param[in] TotalBlocks      Number of blocks of data to write
  */
  *  \param[in] BlockAddress     Data block starting address for the write sequence
  *  \param[in] TotalBlocks      Number of blocks of data to write
  */
-void VirtualFAT_WriteBlocks(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo,
-                            const uint32_t BlockAddress,
+void VirtualFAT_WriteBlocks(const uint16_t BlockAddress,
                             uint16_t TotalBlocks)
 {
        uint16_t CurrentBlock = (uint16_t)BlockAddress;
                             uint16_t TotalBlocks)
 {
        uint16_t CurrentBlock = (uint16_t)BlockAddress;
@@ -264,12 +262,10 @@ void VirtualFAT_WriteBlocks(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo,
 /** Reads a number of blocks from the virtual FAT file system, and sends them
  *  to the host PC via the USB Mass Storage interface.
  *
 /** Reads a number of blocks from the virtual FAT file system, and sends them
  *  to the host PC via the USB Mass Storage interface.
  *
- *  \param[in] MSInterfaceInfo  Pointer to a structure containing a Mass Storage Class configuration and state
  *  \param[in] BlockAddress     Data block starting address for the read sequence
  *  \param[in] TotalBlocks      Number of blocks of data to read
  */
  *  \param[in] BlockAddress     Data block starting address for the read sequence
  *  \param[in] TotalBlocks      Number of blocks of data to read
  */
-void VirtualFAT_ReadBlocks(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo,
-                           const uint32_t BlockAddress,
+void VirtualFAT_ReadBlocks(const uint16_t BlockAddress,
                            uint16_t TotalBlocks)
 {
        uint16_t CurrentBlock = (uint16_t)BlockAddress;
                            uint16_t TotalBlocks)
 {
        uint16_t CurrentBlock = (uint16_t)BlockAddress;
index 8019691..7eacdd9 100644 (file)
                        static void ReadVirtualBlock(const uint16_t BlockNumber) AUX_BOOT_SECTION;
                #endif
 
                        static void ReadVirtualBlock(const uint16_t BlockNumber) AUX_BOOT_SECTION;
                #endif
 
-               void VirtualFAT_WriteBlocks(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo,
-                                           const uint32_t BlockAddress,
+               void VirtualFAT_WriteBlocks(const uint16_t BlockAddress,
                                            uint16_t TotalBlocks) AUX_BOOT_SECTION;
 
                                            uint16_t TotalBlocks) AUX_BOOT_SECTION;
 
-               void VirtualFAT_ReadBlocks(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo,
-                                          const uint32_t BlockAddress,
+               void VirtualFAT_ReadBlocks(const uint16_t BlockAddress,
                                           uint16_t TotalBlocks) AUX_BOOT_SECTION;
 #endif
                                           uint16_t TotalBlocks) AUX_BOOT_SECTION;
 #endif