Revision a8170e5e hw/pflash_cfi01.c
b/hw/pflash_cfi01.c | ||
---|---|---|
61 | 61 |
|
62 | 62 |
struct pflash_t { |
63 | 63 |
BlockDriverState *bs; |
64 |
target_phys_addr_t base;
|
|
65 |
target_phys_addr_t sector_len;
|
|
66 |
target_phys_addr_t total_len;
|
|
64 |
hwaddr base;
|
|
65 |
hwaddr sector_len;
|
|
66 |
hwaddr total_len;
|
|
67 | 67 |
int width; |
68 | 68 |
int wcycle; /* if 0, the flash is read normally */ |
69 | 69 |
int bypass; |
... | ... | |
73 | 73 |
uint16_t ident[4]; |
74 | 74 |
uint8_t cfi_len; |
75 | 75 |
uint8_t cfi_table[0x52]; |
76 |
target_phys_addr_t counter;
|
|
76 |
hwaddr counter;
|
|
77 | 77 |
unsigned int writeblock_size; |
78 | 78 |
QEMUTimer *timer; |
79 | 79 |
MemoryRegion mem; |
... | ... | |
96 | 96 |
pfl->cmd = 0; |
97 | 97 |
} |
98 | 98 |
|
99 |
static uint32_t pflash_read (pflash_t *pfl, target_phys_addr_t offset,
|
|
99 |
static uint32_t pflash_read (pflash_t *pfl, hwaddr offset,
|
|
100 | 100 |
int width, int be) |
101 | 101 |
{ |
102 |
target_phys_addr_t boff;
|
|
102 |
hwaddr boff;
|
|
103 | 103 |
uint32_t ret; |
104 | 104 |
uint8_t *p; |
105 | 105 |
|
... | ... | |
211 | 211 |
} |
212 | 212 |
} |
213 | 213 |
|
214 |
static inline void pflash_data_write(pflash_t *pfl, target_phys_addr_t offset,
|
|
214 |
static inline void pflash_data_write(pflash_t *pfl, hwaddr offset,
|
|
215 | 215 |
uint32_t value, int width, int be) |
216 | 216 |
{ |
217 | 217 |
uint8_t *p = pfl->storage; |
... | ... | |
249 | 249 |
|
250 | 250 |
} |
251 | 251 |
|
252 |
static void pflash_write(pflash_t *pfl, target_phys_addr_t offset,
|
|
252 |
static void pflash_write(pflash_t *pfl, hwaddr offset,
|
|
253 | 253 |
uint32_t value, int width, int be) |
254 | 254 |
{ |
255 | 255 |
uint8_t *p; |
... | ... | |
389 | 389 |
pfl->status |= 0x80; |
390 | 390 |
|
391 | 391 |
if (!pfl->counter) { |
392 |
target_phys_addr_t mask = pfl->writeblock_size - 1;
|
|
392 |
hwaddr mask = pfl->writeblock_size - 1;
|
|
393 | 393 |
mask = ~mask; |
394 | 394 |
|
395 | 395 |
DPRINTF("%s: block write finished\n", __func__); |
... | ... | |
445 | 445 |
} |
446 | 446 |
|
447 | 447 |
|
448 |
static uint32_t pflash_readb_be(void *opaque, target_phys_addr_t addr)
|
|
448 |
static uint32_t pflash_readb_be(void *opaque, hwaddr addr)
|
|
449 | 449 |
{ |
450 | 450 |
return pflash_read(opaque, addr, 1, 1); |
451 | 451 |
} |
452 | 452 |
|
453 |
static uint32_t pflash_readb_le(void *opaque, target_phys_addr_t addr)
|
|
453 |
static uint32_t pflash_readb_le(void *opaque, hwaddr addr)
|
|
454 | 454 |
{ |
455 | 455 |
return pflash_read(opaque, addr, 1, 0); |
456 | 456 |
} |
457 | 457 |
|
458 |
static uint32_t pflash_readw_be(void *opaque, target_phys_addr_t addr)
|
|
458 |
static uint32_t pflash_readw_be(void *opaque, hwaddr addr)
|
|
459 | 459 |
{ |
460 | 460 |
pflash_t *pfl = opaque; |
461 | 461 |
|
462 | 462 |
return pflash_read(pfl, addr, 2, 1); |
463 | 463 |
} |
464 | 464 |
|
465 |
static uint32_t pflash_readw_le(void *opaque, target_phys_addr_t addr)
|
|
465 |
static uint32_t pflash_readw_le(void *opaque, hwaddr addr)
|
|
466 | 466 |
{ |
467 | 467 |
pflash_t *pfl = opaque; |
468 | 468 |
|
469 | 469 |
return pflash_read(pfl, addr, 2, 0); |
470 | 470 |
} |
471 | 471 |
|
472 |
static uint32_t pflash_readl_be(void *opaque, target_phys_addr_t addr)
|
|
472 |
static uint32_t pflash_readl_be(void *opaque, hwaddr addr)
|
|
473 | 473 |
{ |
474 | 474 |
pflash_t *pfl = opaque; |
475 | 475 |
|
476 | 476 |
return pflash_read(pfl, addr, 4, 1); |
477 | 477 |
} |
478 | 478 |
|
479 |
static uint32_t pflash_readl_le(void *opaque, target_phys_addr_t addr)
|
|
479 |
static uint32_t pflash_readl_le(void *opaque, hwaddr addr)
|
|
480 | 480 |
{ |
481 | 481 |
pflash_t *pfl = opaque; |
482 | 482 |
|
483 | 483 |
return pflash_read(pfl, addr, 4, 0); |
484 | 484 |
} |
485 | 485 |
|
486 |
static void pflash_writeb_be(void *opaque, target_phys_addr_t addr,
|
|
486 |
static void pflash_writeb_be(void *opaque, hwaddr addr,
|
|
487 | 487 |
uint32_t value) |
488 | 488 |
{ |
489 | 489 |
pflash_write(opaque, addr, value, 1, 1); |
490 | 490 |
} |
491 | 491 |
|
492 |
static void pflash_writeb_le(void *opaque, target_phys_addr_t addr,
|
|
492 |
static void pflash_writeb_le(void *opaque, hwaddr addr,
|
|
493 | 493 |
uint32_t value) |
494 | 494 |
{ |
495 | 495 |
pflash_write(opaque, addr, value, 1, 0); |
496 | 496 |
} |
497 | 497 |
|
498 |
static void pflash_writew_be(void *opaque, target_phys_addr_t addr,
|
|
498 |
static void pflash_writew_be(void *opaque, hwaddr addr,
|
|
499 | 499 |
uint32_t value) |
500 | 500 |
{ |
501 | 501 |
pflash_t *pfl = opaque; |
... | ... | |
503 | 503 |
pflash_write(pfl, addr, value, 2, 1); |
504 | 504 |
} |
505 | 505 |
|
506 |
static void pflash_writew_le(void *opaque, target_phys_addr_t addr,
|
|
506 |
static void pflash_writew_le(void *opaque, hwaddr addr,
|
|
507 | 507 |
uint32_t value) |
508 | 508 |
{ |
509 | 509 |
pflash_t *pfl = opaque; |
... | ... | |
511 | 511 |
pflash_write(pfl, addr, value, 2, 0); |
512 | 512 |
} |
513 | 513 |
|
514 |
static void pflash_writel_be(void *opaque, target_phys_addr_t addr,
|
|
514 |
static void pflash_writel_be(void *opaque, hwaddr addr,
|
|
515 | 515 |
uint32_t value) |
516 | 516 |
{ |
517 | 517 |
pflash_t *pfl = opaque; |
... | ... | |
519 | 519 |
pflash_write(pfl, addr, value, 4, 1); |
520 | 520 |
} |
521 | 521 |
|
522 |
static void pflash_writel_le(void *opaque, target_phys_addr_t addr,
|
|
522 |
static void pflash_writel_le(void *opaque, hwaddr addr,
|
|
523 | 523 |
uint32_t value) |
524 | 524 |
{ |
525 | 525 |
pflash_t *pfl = opaque; |
... | ... | |
543 | 543 |
.endianness = DEVICE_NATIVE_ENDIAN, |
544 | 544 |
}; |
545 | 545 |
|
546 |
pflash_t *pflash_cfi01_register(target_phys_addr_t base,
|
|
546 |
pflash_t *pflash_cfi01_register(hwaddr base,
|
|
547 | 547 |
DeviceState *qdev, const char *name, |
548 |
target_phys_addr_t size,
|
|
548 |
hwaddr size,
|
|
549 | 549 |
BlockDriverState *bs, uint32_t sector_len, |
550 | 550 |
int nb_blocs, int width, |
551 | 551 |
uint16_t id0, uint16_t id1, |
552 | 552 |
uint16_t id2, uint16_t id3, int be) |
553 | 553 |
{ |
554 | 554 |
pflash_t *pfl; |
555 |
target_phys_addr_t total_len;
|
|
555 |
hwaddr total_len;
|
|
556 | 556 |
int ret; |
557 | 557 |
|
558 | 558 |
total_len = sector_len * nb_blocs; |
Also available in: Unified diff