aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDean Camera <dean@fourwalledcubicle.com>2013-03-20 19:02:29 +0000
committerDean Camera <dean@fourwalledcubicle.com>2013-03-20 19:02:29 +0000
commit199cf8f1830ef1a8db14d311d6bfff26b82ef623 (patch)
tree4c7066af22f99a29827b435636e4f42a2398242b
parent6e8642185a8db602628ea18e6d03d3f71e8be448 (diff)
downloadlufa-199cf8f1830ef1a8db14d311d6bfff26b82ef623.tar.gz
lufa-199cf8f1830ef1a8db14d311d6bfff26b82ef623.tar.bz2
lufa-199cf8f1830ef1a8db14d311d6bfff26b82ef623.zip
Significantly reduce the size of the Mass Storage class bootloader, by removing dependencies on large LUFA internal functions.
-rw-r--r--Bootloaders/MassStorage/BootloaderAPITable.S2
-rw-r--r--Bootloaders/MassStorage/Lib/SCSI.c13
-rw-r--r--Bootloaders/MassStorage/Lib/VirtualFAT.c8
-rw-r--r--Bootloaders/MassStorage/Lib/VirtualFAT.h6
4 files changed, 9 insertions, 20 deletions
diff --git a/Bootloaders/MassStorage/BootloaderAPITable.S b/Bootloaders/MassStorage/BootloaderAPITable.S
index 2d7610b58..7efe8b4b1 100644
--- a/Bootloaders/MassStorage/BootloaderAPITable.S
+++ b/Bootloaders/MassStorage/BootloaderAPITable.S
@@ -29,7 +29,6 @@
*/
#if AUX_BOOT_SECTION_SIZE > 0
-
#warning Using a AUX bootloader section in addition to the defined bootloader space (see documentation).
; Trampoline to jump over the AUX bootloader section to the start of the bootloader,
@@ -38,7 +37,6 @@
.global Boot_AUX_Trampoline
Boot_AUX_Trampoline:
jmp BOOT_START_ADDR
-
#endif
; Trampolines to actual API implementations if the target address is outside the
diff --git a/Bootloaders/MassStorage/Lib/SCSI.c b/Bootloaders/MassStorage/Lib/SCSI.c
index 3df8d3001..ea0700a27 100644
--- a/Bootloaders/MassStorage/Lib/SCSI.c
+++ b/Bootloaders/MassStorage/Lib/SCSI.c
@@ -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)
{
- 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 */
@@ -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)
{
- 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) */
@@ -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)
- VirtualFAT_ReadBlocks(MSInterfaceInfo, BlockAddress, TotalBlocks);
+ VirtualFAT_ReadBlocks(BlockAddress, TotalBlocks);
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);
diff --git a/Bootloaders/MassStorage/Lib/VirtualFAT.c b/Bootloaders/MassStorage/Lib/VirtualFAT.c
index 41c661ed3..e0541f436 100644
--- a/Bootloaders/MassStorage/Lib/VirtualFAT.c
+++ b/Bootloaders/MassStorage/Lib/VirtualFAT.c
@@ -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.
*
- * \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
*/
-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;
@@ -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.
*
- * \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
*/
-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;
diff --git a/Bootloaders/MassStorage/Lib/VirtualFAT.h b/Bootloaders/MassStorage/Lib/VirtualFAT.h
index 8019691dc..7eacdd952 100644
--- a/Bootloaders/MassStorage/Lib/VirtualFAT.h
+++ b/Bootloaders/MassStorage/Lib/VirtualFAT.h
@@ -151,11 +151,9 @@
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;
- 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