projects
/
pub
/
USBasp.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
6e86421
)
Significantly reduce the size of the Mass Storage class bootloader, by removing depen...
author
Dean Camera
<dean@fourwalledcubicle.com>
Wed, 20 Mar 2013 19:02:29 +0000
(19:02 +0000)
committer
Dean Camera
<dean@fourwalledcubicle.com>
Wed, 20 Mar 2013 19:02:29 +0000
(19:02 +0000)
Bootloaders/MassStorage/BootloaderAPITable.S
patch
|
blob
|
blame
|
history
Bootloaders/MassStorage/Lib/SCSI.c
patch
|
blob
|
blame
|
history
Bootloaders/MassStorage/Lib/VirtualFAT.c
patch
|
blob
|
blame
|
history
Bootloaders/MassStorage/Lib/VirtualFAT.h
patch
|
blob
|
blame
|
history
diff --git
a/Bootloaders/MassStorage/BootloaderAPITable.S
b/Bootloaders/MassStorage/BootloaderAPITable.S
index
2d7610b
..
7efe8b4
100644
(file)
--- a/
Bootloaders/MassStorage/BootloaderAPITable.S
+++ b/
Bootloaders/MassStorage/BootloaderAPITable.S
@@
-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
diff --git
a/Bootloaders/MassStorage/Lib/SCSI.c
b/Bootloaders/MassStorage/Lib/SCSI.c
index
3df8d30
..
ea0700a
100644
(file)
--- 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)
{
*/
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)
{
- uint
32
_t BlockAddress;
+ uint
16
_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);
diff --git
a/Bootloaders/MassStorage/Lib/VirtualFAT.c
b/Bootloaders/MassStorage/Lib/VirtualFAT.c
index
41c661e
..
e0541f4
100644
(file)
--- 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.
*
/** 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;
diff --git
a/Bootloaders/MassStorage/Lib/VirtualFAT.h
b/Bootloaders/MassStorage/Lib/VirtualFAT.h
index
8019691
..
7eacdd9
100644
(file)
--- 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
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