#define SDLBA1 (0xffdb)
#define SDLBA2 (0xffdc)
-#define SDC_IDLE_STAT (0x80)
+#define SD_IDLE_STAT (0x80)
-#define SDC_WR_CMD (0x01)
-#define SDC_RD_CMD (0x00)
+#define SD_WR_CMD (0x01)
+#define SD_RD_CMD (0x00)
-#define sdc_reg_ctl *((volatile uint8_t *)SDCTL)
-#define sdc_reg_data *((volatile uint8_t *)SDDATA)
-#define sdc_reg_lba0 *((volatile uint8_t *)SDLBA0)
-#define sdc_reg_lba1 *((volatile uint8_t *)SDLBA1)
-#define sdc_reg_lba2 *((volatile uint8_t *)SDLBA2)
+#define sd_reg_ctl *((volatile uint8_t *)SDCTL)
+#define sd_reg_data *((volatile uint8_t *)SDDATA)
+#define sd_reg_lba0 *((volatile uint8_t *)SDLBA0)
+#define sd_reg_lba1 *((volatile uint8_t *)SDLBA1)
+#define sd_reg_lba2 *((volatile uint8_t *)SDLBA2)
/* a "simple" internal function pointer to which transfer
routine to use.
*/
-typedef void (*sdc_transfer_function_t)( void *addr);
+typedef void (*sd_transfer_function_t)( void *addr);
/* blkdev method: flush drive */
-int devsdc_flush( void )
+int devsd_flush( void )
{
return 0;
}
-/* [NAC HACK 2016Apr26] devsd version is called devsd_transfer_sector */
/* blkdev method: transfer sectors */
-uint8_t devsdc_transfer(void)
+uint8_t devsd_transfer_sector(void)
{
uint8_t *ptr; /* points to 32 bit lba in blk op */
- sdc_transfer_function_t fptr; /* holds which xfer routine we want */
+ sd_transfer_function_t fptr; /* holds which xfer routine we want */
int i;
uint8_t tmp;
/* wait for drive to go non-busy after previous command
(if any)
*/
- while (sdc_reg_ctl != SDC_IDLE_STAT) {
+ while (sd_reg_ctl != SD_IDLE_STAT) {
}
/* [NAC HACK 2016May11] should not need this but real hardware seems
without it and with seemingly equivalent code
*/
for (i=0; i<1000; i++) {
- tmp = sdc_reg_ctl;
+ tmp = sd_reg_ctl;
}
/* load up block address. It's stored as a 32-bit value but we
24-bit address range
*/
ptr=((uint8_t *)(&blk_op.lba))+1;
- sdc_reg_lba2 = ptr[0]; /* MS byte of 24-bit block address */
- sdc_reg_lba1 = ptr[1];
- sdc_reg_lba0 = ptr[2];
+ sd_reg_lba2 = ptr[0]; /* MS byte of 24-bit block address */
+ sd_reg_lba1 = ptr[1];
+ sd_reg_lba0 = ptr[2];
/* send the command and set up the subroutine pointer */
if( blk_op.is_read ){
- sdc_reg_ctl = SDC_RD_CMD;
- fptr = devsdc_read;
+ sd_reg_ctl = SD_RD_CMD;
+ fptr = devsd_read;
}
else{
- sdc_reg_ctl = SDC_WR_CMD;
- fptr = devsdc_write;
+ sd_reg_ctl = SD_WR_CMD;
+ fptr = devsd_write;
}
/* do the low-level data transfer (512 bytes) */
}
__attribute__((section(".discard")))
-/* Returns true if SDC hardware seems to exist */
-bool devsdc_exist()
+/* Returns true if SD hardware seems to exist */
+bool devsd_exist()
{
- /* Only way to boot is through SDC so it must
+ /* Only way to boot is through SD so it must
exist!
*/
return 1;
}
__attribute__((section(".discard")))
-/* Call this to initialize SDC/blkdev interface */
+/* Call this to initialize SD/blkdev interface */
void devsd_init()
{
blkdev_t *blk;
- kputs("SDC: ");
- if( devsdc_exist() ){
- /* register first drive */
+ kputs("SD: ");
+ if( devsd_exist() ){
+ /* there is only 1 drive. Register it. */
blk=blkdev_alloc();
blk->driver_data = 0 ;
- blk->transfer = devsdc_transfer;
- blk->flush = devsdc_flush;
+ blk->transfer = devsd_transfer_sector;
+ blk->flush = devsd_flush;
blk->drive_lba_count=-1;
blk->drive_lba_count=32764; /* [NAC HACK 2016Apr26] hack!! */
-
- /* by inspection of dev/devsd_discard.c, vital piece missing from this code:
- blkdev_scan(blk, 0) - from dev/blkdev.c
- */
blkdev_scan(blk, 0);
- /* register second drive */
- /* blk=blkdev_alloc();
- blk->driver_data = 1 ;
- blk->transfer = devsdc_transfer;
- blk->flush = devsdc_flush;
- blk->drive_lba_count=-1; */
- kputs("Ok.\n");
+ kputs("ok.\n");
}
else kprintf("Not Found.\n");
}