Fix up compilation issues

This commit is contained in:
Michael McMaster 2021-01-06 22:14:36 +10:00
parent 35dec8a9fe
commit c8eb8a88f4
18 changed files with 77 additions and 58 deletions

View File

@ -162,7 +162,7 @@ static void doReadTOC(int MSF, uint8_t track, uint16_t allocationLength)
memcpy(scsiDev.data, SimpleTOC, len);
uint32_t capacity = getScsiCapacity(
scsoDev.target->device,
scsiDev.target->device,
scsiDev.target->cfg->sdSectorStart,
scsiDev.target->state.bytesPerSector,
scsiDev.target->cfg->scsiSectors);

View File

@ -63,7 +63,7 @@ static int usbInEpState;
static int usbDebugEpState;
static int usbReady;
static void initBoardConfig(BoardConfig* config) {
static void initBoardConfig(S2S_BoardConfig* config) {
memcpy(
config,
(
@ -71,7 +71,7 @@ static void initBoardConfig(BoardConfig* config) {
(CY_FLASH_SIZEOF_ARRAY * (size_t) SCSI_CONFIG_ARRAY) +
(CY_FLASH_SIZEOF_ROW * SCSI_CONFIG_BOARD_ROW)
),
sizeof(BoardConfig));
sizeof(S2S_BoardConfig));
if (memcmp(config->magic, "BCFG", 4)) {
// Set a default from the deprecated flags, or 0 if
@ -83,7 +83,7 @@ static void initBoardConfig(BoardConfig* config) {
}
}
void configInit(BoardConfig* config)
void configInit(S2S_BoardConfig* config)
{
// The USB block will be powered by an internal 3.3V regulator.
// The PSoC must be operating between 4.6V and 5V for the regulator
@ -93,7 +93,7 @@ void configInit(BoardConfig* config)
usbReady = 0; // We don't know if host is connected yet.
int invalid = 1;
uint8_t* rawConfig = getConfigByIndex(0);
uint8_t* rawConfig = (uint8_t*)getConfigByIndex(0);
int i;
for (i = 0; i < 64; ++i)
{
@ -404,14 +404,14 @@ void configSave(int scsiId, uint16_t bytesPerSector)
int cfgIdx;
for (cfgIdx = 0; cfgIdx < MAX_SCSI_TARGETS; ++cfgIdx)
{
const TargetConfig* tgt = getConfigByIndex(cfgIdx);
const S2S_TargetCfg* tgt = getConfigByIndex(cfgIdx);
if ((tgt->scsiId & CONFIG_TARGET_ID_BITS) == scsiId)
{
// Save row to flash
// We only save the first row of the configuration
// this contains the parameters changeable by a MODE SELECT command
uint8_t rowData[CYDEV_FLS_ROW_SIZE];
TargetConfig* rowCfgData = (TargetConfig*)&rowData;
S2S_TargetCfg* rowCfgData = (S2S_TargetCfg*)&rowData;
memcpy(rowCfgData, tgt, sizeof(rowData));
rowCfgData->bytesPerSector = bytesPerSector;
@ -426,12 +426,12 @@ void configSave(int scsiId, uint16_t bytesPerSector)
}
const TargetConfig* getConfigByIndex(int i)
const S2S_TargetCfg* getConfigByIndex(int i)
{
if (i <= 3)
{
size_t row = SCSI_CONFIG_0_ROW + (i * SCSI_CONFIG_ROWS);
return (const TargetConfig*)
return (const S2S_TargetCfg*)
(
CY_FLASH_BASE +
(CY_FLASH_SIZEOF_ARRAY * (size_t) SCSI_CONFIG_ARRAY) +
@ -439,7 +439,7 @@ const TargetConfig* getConfigByIndex(int i)
);
} else {
size_t row = SCSI_CONFIG_4_ROW + ((i-4) * SCSI_CONFIG_ROWS);
return (const TargetConfig*)
return (const S2S_TargetCfg*)
(
CY_FLASH_BASE +
(CY_FLASH_SIZEOF_ARRAY * (size_t) SCSI_CONFIG_ARRAY) +
@ -448,12 +448,12 @@ const TargetConfig* getConfigByIndex(int i)
}
}
const TargetConfig* getConfigById(int scsiId)
const S2S_TargetCfg* getConfigById(int scsiId)
{
int i;
for (i = 0; i < MAX_SCSI_TARGETS; ++i)
{
const TargetConfig* tgt = getConfigByIndex(i);
const S2S_TargetCfg* tgt = getConfigByIndex(i);
if ((tgt->scsiId & CONFIG_TARGET_ID_BITS) == scsiId)
{
return tgt;

View File

@ -20,12 +20,12 @@
#include "device.h"
#include "scsi2sd.h"
void configInit(BoardConfig* config);
void configInit(S2S_BoardConfig* config);
void debugInit(void);
void configPoll(void);
void configSave(int scsiId, uint16_t byesPerSector);
const TargetConfig* getConfigByIndex(int index);
const TargetConfig* getConfigById(int scsiId);
const S2S_TargetCfg* getConfigByIndex(int index);
const S2S_TargetCfg* getConfigById(int scsiId);
#endif

View File

@ -76,7 +76,7 @@ static void doFormatUnitHeader(void)
{
// Save the "MODE SELECT savable parameters"
configSave(
scsiDev.target->targetId,
scsiDev.target->cfg->scsiId & CONFIG_TARGET_ID_BITS,
scsiDev.target->state.bytesPerSector);
}
@ -108,7 +108,6 @@ static void doReadCapacity()
uint32_t capacity = getScsiCapacity(
scsiDev.target->device,
scsiDev.device,
scsiDev.target->cfg->sdSectorStart,
scsiDev.target->state.bytesPerSector,
scsiDev.target->cfg->scsiSectors);
@ -172,7 +171,7 @@ static void doWrite(uint32 lba, uint32 blocks)
}
else if (unlikely(((uint64) lba) + blocks >
getScsiCapacity(
scsiDev->device,
scsiDev.target->device,
scsiDev.target->cfg->sdSectorStart,
bytesPerSector,
scsiDev.target->cfg->scsiSectors
@ -218,6 +217,7 @@ static void doRead(uint32 lba, uint32 blocks)
}
uint32_t capacity = getScsiCapacity(
scsiDev.target->device,
scsiDev.target->cfg->sdSectorStart,
scsiDev.target->state.bytesPerSector,
scsiDev.target->cfg->scsiSectors);
@ -271,6 +271,7 @@ static void doSeek(uint32 lba)
{
if (lba >=
getScsiCapacity(
scsiDev.target->device,
scsiDev.target->cfg->sdSectorStart,
scsiDev.target->state.bytesPerSector,
scsiDev.target->cfg->scsiSectors)

View File

@ -21,19 +21,22 @@
#include <string.h>
uint32_t getScsiCapacity(
S2S_Device* device,
uint32_t sdSectorStart,
uint16_t bytesPerSector,
uint32_t scsiSectors)
{
uint32_t devCapacity = device->getCapacity(device);
uint32_t capacity =
(sdDev.capacity - sdSectorStart) /
(devCapacity - sdSectorStart) /
SDSectorsPerSCSISector(bytesPerSector);
if (sdDev.capacity == 0)
if (devCapacity == 0)
{
capacity = 0;
}
else if (sdSectorStart >= sdDev.capacity)
else if (sdSectorStart >= devCapacity)
{
capacity = 0;
}

View File

@ -21,7 +21,8 @@
#include "config.h"
#include "storedevice.h"
#include "sd.h"
typedef enum
{
ADDRESS_BLOCK = 0,

View File

@ -91,7 +91,7 @@ static const uint8 AscImpOperatingDefinition[] =
'S','C','S','I','-','2'
};
static void useCustomVPD(const TargetConfig* cfg, int pageCode)
static void useCustomVPD(const S2S_TargetCfg* cfg, int pageCode)
{
int cfgIdx = 0;
int found = 0;
@ -147,7 +147,7 @@ void scsiInquiry()
}
else
{
const TargetConfig* config = scsiDev.target->cfg;
const S2S_TargetCfg* config = scsiDev.target->cfg;
memcpy(scsiDev.data, StandardResponse, sizeof(StandardResponse));
scsiDev.data[1] = scsiDev.target->cfg->deviceTypeModifier;
@ -180,7 +180,7 @@ void scsiInquiry()
{
memcpy(scsiDev.data, UnitSerialNumber, sizeof(UnitSerialNumber));
scsiDev.dataLen = sizeof(UnitSerialNumber);
const TargetConfig* config = scsiDev.target->cfg;
const S2S_TargetCfg* config = scsiDev.target->cfg;
memcpy(&scsiDev.data[4], config->serial, sizeof(config->serial));
scsiDev.phase = DATA_IN;
}

View File

@ -42,7 +42,6 @@ int main()
configInit(&scsiDev.boardCfg);
debugInit();
scsiPhyConfig();
scsiInit();
@ -99,7 +98,7 @@ int main()
scsiDev.target &&
(scsiDev.target->device->mediaState & MEDIA_PRESENT))
{
scsiDev.target->device->pollMediaBusy();
scsiDev.target->device->pollMediaBusy(scsiDev.target->device);
}
}
return 0;

View File

@ -241,7 +241,7 @@ static void pageIn(int pc, int dataIdx, const uint8* pageData, int pageLen)
}
}
static int useCustomPages(const TargetConfig* cfg, int pc, int pageCode, int* idx)
static int useCustomPages(const S2S_TargetCfg* cfg, int pc, int pageCode, int* idx)
{
int found = 0;
int cfgIdx = 0;
@ -626,7 +626,7 @@ static void doModeSelect(void)
scsiDev.target->state.bytesPerSector = bytesPerSector;
if (bytesPerSector != scsiDev.target->cfg->bytesPerSector)
{
configSave(scsiDev.target->targetId, bytesPerSector);
configSave(scsiDev.target->cfg->scsiId & CONFIG_TARGET_ID_BITS, bytesPerSector);
}
}
}
@ -659,7 +659,7 @@ static void doModeSelect(void)
scsiDev.target->state.bytesPerSector = bytesPerSector;
if (scsiDev.cdb[1] & 1) // SP Save Pages flag
{
configSave(scsiDev.target->targetId, bytesPerSector);
configSave(scsiDev.target->cfg->scsiId & CONFIG_TARGET_ID_BITS, bytesPerSector);
}
}
break;

View File

@ -319,7 +319,7 @@ static void process_Command()
if ((scsiDev.lun > 0) && (scsiDev.boardCfg.flags & CONFIG_MAP_LUNS_TO_IDS))
{
S2S_Target* lunTarget = s2s_DeviceFindByScsiId(scsiDev.lun);
if (lunTarget! = NULL)
if (lunTarget != NULL)
{
scsiDev.target = lunTarget;
scsiDev.lun = 0;
@ -330,7 +330,7 @@ static void process_Command()
control = scsiDev.cdb[scsiDev.cdbLen - 1];
scsiDev.cmdCount++;
const TargetConfig* cfg = scsiDev.target->cfg;
const S2S_TargetCfg* cfg = scsiDev.target->cfg;
if (unlikely(scsiDev.resetFlag))
{
@ -663,7 +663,7 @@ static void process_SelectionPhase()
int atnFlag = SCSI_ReadFilt(SCSI_Filt_ATN);
S2S_Target* target = NULL;
for (int testIdx = 0; testtIndex < 8; ++testtIndex)
for (int testIdx = 0; testIdx < 8; ++testIdx)
{
target = s2s_DeviceFindByScsiId(1 << testIdx);
if (target)
@ -725,7 +725,7 @@ static void process_SelectionPhase()
// SCSI1/SASI initiators may not set their own ID.
{
int i;
uint8_t initiatorMask = mask ^ (1 << target->targetId);
uint8_t initiatorMask = mask ^ (1 << (target->cfg->scsiId & CONFIG_TARGET_ID_BITS));
scsiDev.initiatorId = -1;
for (i = 0; i < 8; ++i)
{
@ -1056,17 +1056,17 @@ void scsiInit()
for (int devIdx = 0; devIdx < deviceCount; ++devIdx)
{
int targetCount;
S2S_Target* targets = devices[deviceIdx].getTargets(devices + deviceIdx, &targetCount);
S2S_Target* targets = allDevices[devIdx].getTargets(allDevices + devIdx, &targetCount);
for (int i = 0; i < targetCount; ++i)
{
S2S_TargetState* state = &(targets[i].state);
scsiDev.targets[i].state.reservedId = -1;
scsiDev.targets[i].state.reserverId = -1;
scsiDev.targets[i].state.unitAttention = POWER_ON_RESET;
scsiDev.targets[i].state.sense.code = NO_SENSE;
scsiDev.targets[i].state.sense.asc = NO_ADDITIONAL_SENSE_INFORMATION;
state->reservedId = -1;
state->reserverId = -1;
state->unitAttention = POWER_ON_RESET;
state->sense.code = NO_SENSE;
state->sense.asc = NO_ADDITIONAL_SENSE_INFORMATION;
state->bytesPerSector = targets[i].cfg->bytesPerSector;
}
@ -1105,7 +1105,7 @@ int scsiReconnect()
{
// Arbitrate.
ledOn();
uint8_t scsiIdMask = 1 << scsiDev.target->targetId;
uint8_t scsiIdMask = 1 << (scsiDev.target->cfg->scsiId & CONFIG_TARGET_ID_BITS);
SCSI_Out_Bits_Write(scsiIdMask);
SCSI_Out_Ctl_Write(1); // Write bits manually.
SCSI_SetPin(SCSI_Out_BSY);

View File

@ -76,6 +76,7 @@ typedef enum
typedef struct
{
S2S_Target* target;
S2S_BoardConfig boardCfg;
// Set to true (1) if the ATN flag was set, and we need to
// enter the MESSAGE_OUT phase.

View File

@ -35,7 +35,7 @@ static int sd_pollMediaChange(S2S_Device* dev);
static void sd_pollMediaBusy(S2S_Device* dev);
// Global
SdCard sdCard S2S_DMA_ALIGN = {
SdCard sdCard = {
{
sd_earlyInit,
sd_getTargets,
@ -1003,14 +1003,14 @@ void sdCheckPresent()
// LOGICAL_UNIT_NOT_READY_INITIALIZING_COMMAND_REQUIRED sense
// code, even if they stopped it first with
// START STOP UNIT command.
blockDev.state |= DISK_STARTED;
sdCard.dev.mediaState |= MEDIA_STARTED;
if (!firstInit)
{
int i;
for (i = 0; i < MAX_SCSI_TARGETS; ++i)
{
scsiDev.targets[i].unitAttention = PARAMETERS_CHANGED;
sdCard.targets[i].state.unitAttention = PARAMETERS_CHANGED;
}
}
firstInit = 0;
@ -1035,12 +1035,12 @@ static void sd_earlyInit(S2S_Device* dev)
{
SdCard* sdCardDevice = (SdCard*)dev;
for (int i = 0; i < MAX_TARGETS; ++i)
for (int i = 0; i < MAX_SCSI_TARGETS; ++i)
{
sdCardDevice->targets[i].device = dev;
sdCardDevice->targets[i].cfg = getConfigByIndex(i);
}
sdCardDevice->lastPollMediaTime = s2s_getTime_ms();
sdCardDevice->lastPollMediaTime = getTime_ms();
// Don't require the host to send us a START STOP UNIT command
sdCardDevice->dev.mediaState = MEDIA_STARTED;
@ -1050,7 +1050,7 @@ static void sd_earlyInit(S2S_Device* dev)
static S2S_Target* sd_getTargets(S2S_Device* dev, int* count)
{
SdCard* sdCardDevice = (SdCard*)dev;
*count = MAX_TARGETS;
*count = MAX_SCSI_TARGETS;
return sdCardDevice->targets;
}
@ -1063,9 +1063,9 @@ static uint32_t sd_getCapacity(S2S_Device* dev)
static int sd_pollMediaChange(S2S_Device* dev)
{
SdCard* sdCardDevice = (SdCard*)dev;
if (s2s_elapsedTime_ms(sdCardDevice->lastPollMediaTime) > 200)
if (elapsedTime_ms(sdCardDevice->lastPollMediaTime) > 200)
{
sdCardDevice->lastPollMediaTime = s2s_getTime_ms();
sdCardDevice->lastPollMediaTime = getTime_ms();
sdCheckPresent();
return 0;
}
@ -1078,6 +1078,6 @@ static int sd_pollMediaChange(S2S_Device* dev)
static void sd_pollMediaBusy(S2S_Device* dev)
{
SdCard* sdCardDevice = (SdCard*)dev;
sdCardDevice->lastPollMediaTime = s2s_getTime_ms();
sdCardDevice->lastPollMediaTime = getTime_ms();
}

View File

@ -56,11 +56,11 @@ typedef struct
{
S2S_Device dev;
S2S_Target targets[MAX_TARGETS];
S2S_Target targets[MAX_SCSI_TARGETS];
int version; // SDHC = version 2.
int ccs; // Card Capacity Status. 1 = SDHC or SDXC
uint32 capacity; // in 512 byte blocks
uint32_t capacity; // in 512 byte blocks
uint8_t csd[16]; // Unparsed CSD
uint8_t cid[16]; // Unparsed CID

View File

@ -169,8 +169,8 @@ typedef enum
typedef struct
{
uint8 code;
uint16 asc;
uint8_t code;
uint16_t asc;
} ScsiSense;
#endif

View File

@ -33,8 +33,8 @@ S2S_Target* s2s_DeviceFindByScsiId(int scsiId)
{
S2S_Target* target = targets + targetIdx;
if (target &&
(target->cfg->scsiId & S2S_CFG_TARGET_ENABLED) &&
((target->cfg->scsiId & S2S_CFG_TARGET_ID_BITS) == scsiId))
(target->cfg->scsiId & CONFIG_TARGET_ENABLED) &&
((target->cfg->scsiId & CONFIG_TARGET_ID_BITS) == scsiId))
{
return target;
}

View File

@ -151,6 +151,13 @@
<build_action v="SOURCE_C;;;;" />
<PropertyDeltas />
</CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b>
<CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFileSerialize" version="3" xml_contents_version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="storedevice.c" persistent="..\..\src\storedevice.c">
<Hidden v="False" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<build_action v="SOURCE_C;;;;" />
<PropertyDeltas />
</CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b>
</dependencies>
</CyGuid_0820c2e7-528d-4137-9a08-97257b946089>
</CyGuid_2f73275c-45bf-46ba-b3b1-00a2fe0c8dd8>
@ -322,6 +329,13 @@
<build_action v="HEADER;;;;" />
<PropertyDeltas />
</CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b>
<CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtFileSerialize" version="3" xml_contents_version="1">
<CyGuid_31768f72-0253-412b-af77-e7dba74d1330 type_name="CyDesigner.Common.ProjMgmt.Model.CyPrjMgmtItemSerialize" version="2" name="storedevice.h" persistent="..\..\src\storedevice.h">
<Hidden v="False" />
</CyGuid_31768f72-0253-412b-af77-e7dba74d1330>
<build_action v="HEADER;;;;" />
<PropertyDeltas />
</CyGuid_8b8ab257-35d3-4473-b57b-36315200b38b>
</dependencies>
</CyGuid_0820c2e7-528d-4137-9a08-97257b946089>
</CyGuid_2f73275c-45bf-46ba-b3b1-00a2fe0c8dd8>

View File

@ -184,7 +184,7 @@ typedef struct __attribute__((packed))
uint8_t modePages[1024];
uint8_t vpd[1024];
uint8_t unused[1024]; // Total size is 4k.
} TargetConfig;
} S2S_TargetCfg;
typedef struct __attribute__((packed))
{
@ -198,7 +198,7 @@ typedef struct __attribute__((packed))
uint8_t reserved[247]; // Pad out to 256 bytes
} BoardConfig;
} S2S_BoardConfig;
typedef enum
{