ide.c (2e192b245ed36a63bab0ef576999a95e23f60ecd) ide.c (4101f6879256720b30df712089a3df18565f9203)
1/*
2 * (C) Copyright 2000-2011
3 * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
4 *
5 * SPDX-License-Identifier: GPL-2.0+
6 */
7
8/*

--- 39 unchanged lines hidden (view full) ---

48#endif
49#if defined(CONFIG_SYS_ATA_IDE1_OFFSET) && (CONFIG_SYS_IDE_MAXBUS > 1)
50 CONFIG_SYS_ATA_IDE1_OFFSET,
51#endif
52};
53
54static int ide_bus_ok[CONFIG_SYS_IDE_MAXBUS];
55
1/*
2 * (C) Copyright 2000-2011
3 * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
4 *
5 * SPDX-License-Identifier: GPL-2.0+
6 */
7
8/*

--- 39 unchanged lines hidden (view full) ---

48#endif
49#if defined(CONFIG_SYS_ATA_IDE1_OFFSET) && (CONFIG_SYS_IDE_MAXBUS > 1)
50 CONFIG_SYS_ATA_IDE1_OFFSET,
51#endif
52};
53
54static int ide_bus_ok[CONFIG_SYS_IDE_MAXBUS];
55
56block_dev_desc_t ide_dev_desc[CONFIG_SYS_IDE_MAXDEVICE];
56struct blk_desc ide_dev_desc[CONFIG_SYS_IDE_MAXDEVICE];
57/* ------------------------------------------------------------------------- */
58
59#ifdef CONFIG_IDE_RESET
60static void ide_reset (void);
61#else
62#define ide_reset() /* dummy */
63#endif
64
57/* ------------------------------------------------------------------------- */
58
59#ifdef CONFIG_IDE_RESET
60static void ide_reset (void);
61#else
62#define ide_reset() /* dummy */
63#endif
64
65static void ide_ident (block_dev_desc_t *dev_desc);
65static void ide_ident(struct blk_desc *dev_desc);
66static uchar ide_wait (int dev, ulong t);
67
68#define IDE_TIME_OUT 2000 /* 2 sec timeout */
69
70#define ATAPI_TIME_OUT 7000 /* 7 sec timeout (5 sec seems to work...) */
71
72#define IDE_SPIN_UP_TIME_OUT 5000 /* 5 sec spin-up timeout */
73
74static void ident_cpy (unsigned char *dest, unsigned char *src, unsigned int len);
75
76#ifndef CONFIG_SYS_ATA_PORT_ADDR
77#define CONFIG_SYS_ATA_PORT_ADDR(port) (port)
78#endif
79
80#ifdef CONFIG_ATAPI
66static uchar ide_wait (int dev, ulong t);
67
68#define IDE_TIME_OUT 2000 /* 2 sec timeout */
69
70#define ATAPI_TIME_OUT 7000 /* 7 sec timeout (5 sec seems to work...) */
71
72#define IDE_SPIN_UP_TIME_OUT 5000 /* 5 sec spin-up timeout */
73
74static void ident_cpy (unsigned char *dest, unsigned char *src, unsigned int len);
75
76#ifndef CONFIG_SYS_ATA_PORT_ADDR
77#define CONFIG_SYS_ATA_PORT_ADDR(port) (port)
78#endif
79
80#ifdef CONFIG_ATAPI
81static void atapi_inquiry(block_dev_desc_t *dev_desc);
82static ulong atapi_read(block_dev_desc_t *block_dev, lbaint_t blknr,
81static void atapi_inquiry(struct blk_desc *dev_desc);
82static ulong atapi_read(struct blk_desc *block_dev, lbaint_t blknr,
83 lbaint_t blkcnt, void *buffer);
84#endif
85
86
87/* ------------------------------------------------------------------------- */
88
89int do_ide(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
90{

--- 91 unchanged lines hidden (view full) ---

182
183 return CMD_RET_USAGE;
184 default:
185 /* at least 4 args */
186
187 if (strcmp(argv[1], "read") == 0) {
188 ulong addr = simple_strtoul(argv[2], NULL, 16);
189 ulong cnt = simple_strtoul(argv[4], NULL, 16);
83 lbaint_t blkcnt, void *buffer);
84#endif
85
86
87/* ------------------------------------------------------------------------- */
88
89int do_ide(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
90{

--- 91 unchanged lines hidden (view full) ---

182
183 return CMD_RET_USAGE;
184 default:
185 /* at least 4 args */
186
187 if (strcmp(argv[1], "read") == 0) {
188 ulong addr = simple_strtoul(argv[2], NULL, 16);
189 ulong cnt = simple_strtoul(argv[4], NULL, 16);
190 block_dev_desc_t *dev_desc;
190 struct blk_desc *dev_desc;
191 ulong n;
192
193#ifdef CONFIG_SYS_64BIT_LBA
194 lbaint_t blk = simple_strtoull(argv[3], NULL, 16);
195
196 printf("\nIDE read: device %d block # %lld, count %ld ... ",
197 curr_device, blk, cnt);
198#else

--- 242 unchanged lines hidden (view full) ---

441 }
442 }
443 WATCHDOG_RESET();
444}
445
446/* ------------------------------------------------------------------------- */
447
448#ifdef CONFIG_PARTITIONS
191 ulong n;
192
193#ifdef CONFIG_SYS_64BIT_LBA
194 lbaint_t blk = simple_strtoull(argv[3], NULL, 16);
195
196 printf("\nIDE read: device %d block # %lld, count %ld ... ",
197 curr_device, blk, cnt);
198#else

--- 242 unchanged lines hidden (view full) ---

441 }
442 }
443 WATCHDOG_RESET();
444}
445
446/* ------------------------------------------------------------------------- */
447
448#ifdef CONFIG_PARTITIONS
449block_dev_desc_t *ide_get_dev(int dev)
449struct blk_desc *ide_get_dev(int dev)
450{
451 return (dev < CONFIG_SYS_IDE_MAXDEVICE) ? &ide_dev_desc[dev] : NULL;
452}
453#endif
454
455/* ------------------------------------------------------------------------- */
456
457/* We only need to swap data if we are running on a big endian cpu. */

--- 78 unchanged lines hidden (view full) ---

536 insw(ATA_CURR_BASE(dev) + ATA_DATA_REG, sect_buf, words << 1);
537#endif
538}
539
540#endif /* CONFIG_IDE_SWAP_IO */
541
542/* -------------------------------------------------------------------------
543 */
450{
451 return (dev < CONFIG_SYS_IDE_MAXDEVICE) ? &ide_dev_desc[dev] : NULL;
452}
453#endif
454
455/* ------------------------------------------------------------------------- */
456
457/* We only need to swap data if we are running on a big endian cpu. */

--- 78 unchanged lines hidden (view full) ---

536 insw(ATA_CURR_BASE(dev) + ATA_DATA_REG, sect_buf, words << 1);
537#endif
538}
539
540#endif /* CONFIG_IDE_SWAP_IO */
541
542/* -------------------------------------------------------------------------
543 */
544static void ide_ident(block_dev_desc_t *dev_desc)
544static void ide_ident(struct blk_desc *dev_desc)
545{
546 unsigned char c;
547 hd_driveid_t iop;
548
549#ifdef CONFIG_ATAPI
550 int retries = 0;
551#endif
552 int device;

--- 155 unchanged lines hidden (view full) ---

708 udelay(50);
709 c = ide_wait(device, IDE_TIME_OUT); /* can't take over 500 ms */
710#endif
711}
712
713
714/* ------------------------------------------------------------------------- */
715
545{
546 unsigned char c;
547 hd_driveid_t iop;
548
549#ifdef CONFIG_ATAPI
550 int retries = 0;
551#endif
552 int device;

--- 155 unchanged lines hidden (view full) ---

708 udelay(50);
709 c = ide_wait(device, IDE_TIME_OUT); /* can't take over 500 ms */
710#endif
711}
712
713
714/* ------------------------------------------------------------------------- */
715
716ulong ide_read(block_dev_desc_t *block_dev, lbaint_t blknr, lbaint_t blkcnt,
716ulong ide_read(struct blk_desc *block_dev, lbaint_t blknr, lbaint_t blkcnt,
717 void *buffer)
718{
719 int device = block_dev->dev;
720 ulong n = 0;
721 unsigned char c;
722 unsigned char pwrsave = 0; /* power save */
723
724#ifdef CONFIG_LBA48

--- 109 unchanged lines hidden (view full) ---

834IDE_READ_E:
835 ide_led(DEVICE_LED(device), 0); /* LED off */
836 return (n);
837}
838
839/* ------------------------------------------------------------------------- */
840
841
717 void *buffer)
718{
719 int device = block_dev->dev;
720 ulong n = 0;
721 unsigned char c;
722 unsigned char pwrsave = 0; /* power save */
723
724#ifdef CONFIG_LBA48

--- 109 unchanged lines hidden (view full) ---

834IDE_READ_E:
835 ide_led(DEVICE_LED(device), 0); /* LED off */
836 return (n);
837}
838
839/* ------------------------------------------------------------------------- */
840
841
842ulong ide_write(block_dev_desc_t *block_dev, lbaint_t blknr, lbaint_t blkcnt,
842ulong ide_write(struct blk_desc *block_dev, lbaint_t blknr, lbaint_t blkcnt,
843 const void *buffer)
844{
845 int device = block_dev->dev;
846 ulong n = 0;
847 unsigned char c;
848
849#ifdef CONFIG_LBA48
850 unsigned char lba48 = 0;

--- 445 unchanged lines hidden (view full) ---

1296 printf("ERROR: Unknown Sense key %02X ASC %02X ASCQ %02X\n", key, asc,
1297 ascq);
1298error:
1299 debug("ERROR Sense key %02X ASC %02X ASCQ %02X\n", key, asc, ascq);
1300 return (0xFF);
1301}
1302
1303
843 const void *buffer)
844{
845 int device = block_dev->dev;
846 ulong n = 0;
847 unsigned char c;
848
849#ifdef CONFIG_LBA48
850 unsigned char lba48 = 0;

--- 445 unchanged lines hidden (view full) ---

1296 printf("ERROR: Unknown Sense key %02X ASC %02X ASCQ %02X\n", key, asc,
1297 ascq);
1298error:
1299 debug("ERROR Sense key %02X ASC %02X ASCQ %02X\n", key, asc, ascq);
1300 return (0xFF);
1301}
1302
1303
1304static void atapi_inquiry(block_dev_desc_t *dev_desc)
1304static void atapi_inquiry(struct blk_desc *dev_desc)
1305{
1306 unsigned char ccb[12]; /* Command descriptor block */
1307 unsigned char iobuf[64]; /* temp buf */
1308 unsigned char c;
1309 int device;
1310
1311 device = dev_desc->dev;
1312 dev_desc->type = DEV_TYPE_UNKNOWN; /* not yet valid */

--- 76 unchanged lines hidden (view full) ---

1389 * atapi_read:
1390 * we transfer only one block per command, since the multiple DRQ per
1391 * command is not yet implemented
1392 */
1393#define ATAPI_READ_MAX_BYTES 2048 /* we read max 2kbytes */
1394#define ATAPI_READ_BLOCK_SIZE 2048 /* assuming CD part */
1395#define ATAPI_READ_MAX_BLOCK (ATAPI_READ_MAX_BYTES/ATAPI_READ_BLOCK_SIZE)
1396
1305{
1306 unsigned char ccb[12]; /* Command descriptor block */
1307 unsigned char iobuf[64]; /* temp buf */
1308 unsigned char c;
1309 int device;
1310
1311 device = dev_desc->dev;
1312 dev_desc->type = DEV_TYPE_UNKNOWN; /* not yet valid */

--- 76 unchanged lines hidden (view full) ---

1389 * atapi_read:
1390 * we transfer only one block per command, since the multiple DRQ per
1391 * command is not yet implemented
1392 */
1393#define ATAPI_READ_MAX_BYTES 2048 /* we read max 2kbytes */
1394#define ATAPI_READ_BLOCK_SIZE 2048 /* assuming CD part */
1395#define ATAPI_READ_MAX_BLOCK (ATAPI_READ_MAX_BYTES/ATAPI_READ_BLOCK_SIZE)
1396
1397ulong atapi_read(block_dev_desc_t *block_dev, lbaint_t blknr, lbaint_t blkcnt,
1397ulong atapi_read(struct blk_desc *block_dev, lbaint_t blknr, lbaint_t blkcnt,
1398 void *buffer)
1399{
1400 int device = block_dev->dev;
1401 ulong n = 0;
1402 unsigned char ccb[12]; /* Command descriptor block */
1403 ulong cnt;
1404
1405 debug("atapi_read dev %d start " LBAF " blocks " LBAF " buffer at %lX\n",

--- 52 unchanged lines hidden ---
1398 void *buffer)
1399{
1400 int device = block_dev->dev;
1401 ulong n = 0;
1402 unsigned char ccb[12]; /* Command descriptor block */
1403 ulong cnt;
1404
1405 debug("atapi_read dev %d start " LBAF " blocks " LBAF " buffer at %lX\n",

--- 52 unchanged lines hidden ---