Commit c5df018e56855cd6ede7ab7b07fb69703d581383
1 parent
a541f297
ppc: suppressed unneeded globals and headers - added explicit type for ppc nvram
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@723 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
5 changed files
with
93 additions
and
129 deletions
hw/m48t59.c
| ... | ... | @@ -21,14 +21,8 @@ |
| 21 | 21 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
| 22 | 22 | * THE SOFTWARE. |
| 23 | 23 | */ |
| 24 | - | |
| 25 | -#include <stdlib.h> | |
| 26 | -#include <stdio.h> /* needed by vl.h */ | |
| 27 | -#include <stdint.h> | |
| 28 | -#include <string.h> | |
| 29 | -#include <time.h> | |
| 30 | - | |
| 31 | 24 | #include "vl.h" |
| 25 | +#include "m48t59.h" | |
| 32 | 26 | |
| 33 | 27 | //#define NVRAM_DEBUG |
| 34 | 28 | |
| ... | ... | @@ -38,7 +32,7 @@ |
| 38 | 32 | #define NVRAM_PRINTF(fmt, args...) do { } while (0) |
| 39 | 33 | #endif |
| 40 | 34 | |
| 41 | -typedef struct m48t59_t { | |
| 35 | +struct m48t59_t { | |
| 42 | 36 | /* Hardware parameters */ |
| 43 | 37 | int IRQ; |
| 44 | 38 | uint32_t io_base; |
| ... | ... | @@ -53,10 +47,7 @@ typedef struct m48t59_t { |
| 53 | 47 | /* NVRAM storage */ |
| 54 | 48 | uint16_t addr; |
| 55 | 49 | uint8_t *buffer; |
| 56 | -} m48t59_t; | |
| 57 | - | |
| 58 | -static m48t59_t *NVRAMs; | |
| 59 | -static int nb_NVRAMs; | |
| 50 | +}; | |
| 60 | 51 | |
| 61 | 52 | /* Fake timer functions */ |
| 62 | 53 | /* Generic helpers for BCD */ |
| ... | ... | @@ -185,9 +176,8 @@ static void set_up_watchdog (m48t59_t *NVRAM, uint8_t value) |
| 185 | 176 | } |
| 186 | 177 | |
| 187 | 178 | /* Direct access to NVRAM */ |
| 188 | -void m48t59_write (void *opaque, uint32_t val) | |
| 179 | +void m48t59_write (m48t59_t *NVRAM, uint32_t val) | |
| 189 | 180 | { |
| 190 | - m48t59_t *NVRAM = opaque; | |
| 191 | 181 | struct tm tm; |
| 192 | 182 | int tmp; |
| 193 | 183 | |
| ... | ... | @@ -333,9 +323,8 @@ void m48t59_write (void *opaque, uint32_t val) |
| 333 | 323 | } |
| 334 | 324 | } |
| 335 | 325 | |
| 336 | -uint32_t m48t59_read (void *opaque) | |
| 326 | +uint32_t m48t59_read (m48t59_t *NVRAM) | |
| 337 | 327 | { |
| 338 | - m48t59_t *NVRAM = opaque; | |
| 339 | 328 | struct tm tm; |
| 340 | 329 | uint32_t retval = 0xFF; |
| 341 | 330 | |
| ... | ... | @@ -418,10 +407,8 @@ uint32_t m48t59_read (void *opaque) |
| 418 | 407 | return retval; |
| 419 | 408 | } |
| 420 | 409 | |
| 421 | -void m48t59_set_addr (void *opaque, uint32_t addr) | |
| 410 | +void m48t59_set_addr (m48t59_t *NVRAM, uint32_t addr) | |
| 422 | 411 | { |
| 423 | - m48t59_t *NVRAM = opaque; | |
| 424 | - | |
| 425 | 412 | NVRAM->addr = addr; |
| 426 | 413 | } |
| 427 | 414 | |
| ... | ... | @@ -460,27 +447,25 @@ static uint32_t NVRAM_readb (void *opaque, uint32_t addr) |
| 460 | 447 | } |
| 461 | 448 | |
| 462 | 449 | /* Initialisation routine */ |
| 463 | -void *m48t59_init (int IRQ, uint32_t io_base, uint16_t size) | |
| 450 | +m48t59_t *m48t59_init (int IRQ, uint32_t io_base, uint16_t size) | |
| 464 | 451 | { |
| 465 | - m48t59_t *tmp; | |
| 452 | + m48t59_t *s; | |
| 466 | 453 | |
| 467 | - tmp = realloc(NVRAMs, (nb_NVRAMs + 1) * sizeof(m48t59_t)); | |
| 468 | - if (tmp == NULL) | |
| 454 | + s = qemu_mallocz(sizeof(m48t59_t)); | |
| 455 | + if (!s) | |
| 469 | 456 | return NULL; |
| 470 | - NVRAMs = tmp; | |
| 471 | - tmp[nb_NVRAMs].buffer = malloc(size); | |
| 472 | - if (tmp[nb_NVRAMs].buffer == NULL) | |
| 473 | - return NULL; | |
| 474 | - memset(tmp[nb_NVRAMs].buffer, 0, size); | |
| 475 | - tmp[nb_NVRAMs].IRQ = IRQ; | |
| 476 | - tmp[nb_NVRAMs].size = size; | |
| 477 | - tmp[nb_NVRAMs].io_base = io_base; | |
| 478 | - tmp[nb_NVRAMs].addr = 0; | |
| 479 | - register_ioport_read(io_base, 0x04, 1, NVRAM_readb, &NVRAMs[nb_NVRAMs]); | |
| 480 | - register_ioport_write(io_base, 0x04, 1, NVRAM_writeb, &NVRAMs[nb_NVRAMs]); | |
| 481 | - tmp[nb_NVRAMs].alrm_timer = qemu_new_timer(vm_clock, &alarm_cb, | |
| 482 | - &tmp[nb_NVRAMs]); | |
| 483 | - tmp[nb_NVRAMs].wd_timer = qemu_new_timer(vm_clock, &watchdog_cb, | |
| 484 | - &tmp[nb_NVRAMs]); | |
| 485 | - return &NVRAMs[nb_NVRAMs++]; | |
| 457 | + s->buffer = qemu_mallocz(size); | |
| 458 | + if (!s->buffer) { | |
| 459 | + qemu_free(s); | |
| 460 | + return NULL; | |
| 461 | + } | |
| 462 | + s->IRQ = IRQ; | |
| 463 | + s->size = size; | |
| 464 | + s->io_base = io_base; | |
| 465 | + s->addr = 0; | |
| 466 | + register_ioport_read(io_base, 0x04, 1, NVRAM_readb, s); | |
| 467 | + register_ioport_write(io_base, 0x04, 1, NVRAM_writeb, s); | |
| 468 | + s->alrm_timer = qemu_new_timer(vm_clock, &alarm_cb, s); | |
| 469 | + s->wd_timer = qemu_new_timer(vm_clock, &watchdog_cb, s); | |
| 470 | + return s; | |
| 486 | 471 | } | ... | ... |
hw/m48t59.h
| 1 | 1 | #if !defined (__M48T59_H__) |
| 2 | 2 | #define __M48T59_H__ |
| 3 | 3 | |
| 4 | -void m48t59_write (void *opaque, uint32_t val); | |
| 5 | -uint32_t m48t59_read (void *opaque); | |
| 6 | -void m48t59_set_addr (void *opaque, uint32_t addr); | |
| 7 | -void *m48t59_init (int IRQ, uint32_t io_base, uint16_t size); | |
| 4 | +typedef struct m48t59_t m48t59_t; | |
| 5 | + | |
| 6 | +void m48t59_write (m48t59_t *NVRAM, uint32_t val); | |
| 7 | +uint32_t m48t59_read (m48t59_t *NVRAM); | |
| 8 | +void m48t59_set_addr (m48t59_t *NVRAM, uint32_t addr); | |
| 9 | +m48t59_t *m48t59_init (int IRQ, uint32_t io_base, uint16_t size); | |
| 8 | 10 | |
| 9 | 11 | #endif /* !defined (__M48T59_H__) */ | ... | ... |
hw/ppc.c
hw/ppc_prep.c
| ... | ... | @@ -21,26 +21,6 @@ |
| 21 | 21 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
| 22 | 22 | * THE SOFTWARE. |
| 23 | 23 | */ |
| 24 | -#include <stdlib.h> | |
| 25 | -#include <stdio.h> | |
| 26 | -#include <stdarg.h> | |
| 27 | -#include <string.h> | |
| 28 | -#include <getopt.h> | |
| 29 | -#include <inttypes.h> | |
| 30 | -#include <unistd.h> | |
| 31 | -#include <sys/mman.h> | |
| 32 | -#include <fcntl.h> | |
| 33 | -#include <signal.h> | |
| 34 | -#include <time.h> | |
| 35 | -#include <sys/time.h> | |
| 36 | -#include <malloc.h> | |
| 37 | -#include <termios.h> | |
| 38 | -#include <sys/poll.h> | |
| 39 | -#include <errno.h> | |
| 40 | -#include <sys/wait.h> | |
| 41 | -#include <netinet/in.h> | |
| 42 | - | |
| 43 | -#include "cpu.h" | |
| 44 | 24 | #include "vl.h" |
| 45 | 25 | #include "m48t59.h" |
| 46 | 26 | |
| ... | ... | @@ -209,8 +189,6 @@ static CPUReadMemoryFunc *PPC_io_read[] = { |
| 209 | 189 | &PPC_io_readl, |
| 210 | 190 | }; |
| 211 | 191 | |
| 212 | -uint32_t pic_intack_read(CPUState *env); | |
| 213 | - | |
| 214 | 192 | /* Read-only register (?) */ |
| 215 | 193 | static void _PPC_ioB_write (uint32_t addr, uint32_t value, uint32_t vaddr) |
| 216 | 194 | { |
| ... | ... | @@ -368,63 +346,63 @@ static uint32_t PREP_io_800_readb (void *opaque, uint32_t addr) |
| 368 | 346 | #define NVRAM_OSAREA_SIZE 512 |
| 369 | 347 | #define NVRAM_CONFSIZE 1024 |
| 370 | 348 | |
| 371 | -static inline void NVRAM_set_byte (void *opaque, uint32_t addr, uint8_t value) | |
| 349 | +static inline void NVRAM_set_byte (m48t59_t *nvram, uint32_t addr, uint8_t value) | |
| 372 | 350 | { |
| 373 | - m48t59_set_addr(opaque, addr); | |
| 374 | - m48t59_write(opaque, value); | |
| 351 | + m48t59_set_addr(nvram, addr); | |
| 352 | + m48t59_write(nvram, value); | |
| 375 | 353 | } |
| 376 | 354 | |
| 377 | -static inline uint8_t NVRAM_get_byte (void *opaque, uint32_t addr) | |
| 355 | +static inline uint8_t NVRAM_get_byte (m48t59_t *nvram, uint32_t addr) | |
| 378 | 356 | { |
| 379 | - m48t59_set_addr(opaque, addr); | |
| 380 | - return m48t59_read(opaque); | |
| 357 | + m48t59_set_addr(nvram, addr); | |
| 358 | + return m48t59_read(nvram); | |
| 381 | 359 | } |
| 382 | 360 | |
| 383 | -static inline void NVRAM_set_word (void *opaque, uint32_t addr, uint16_t value) | |
| 361 | +static inline void NVRAM_set_word (m48t59_t *nvram, uint32_t addr, uint16_t value) | |
| 384 | 362 | { |
| 385 | - m48t59_set_addr(opaque, addr); | |
| 386 | - m48t59_write(opaque, value >> 8); | |
| 387 | - m48t59_set_addr(opaque, addr + 1); | |
| 388 | - m48t59_write(opaque, value & 0xFF); | |
| 363 | + m48t59_set_addr(nvram, addr); | |
| 364 | + m48t59_write(nvram, value >> 8); | |
| 365 | + m48t59_set_addr(nvram, addr + 1); | |
| 366 | + m48t59_write(nvram, value & 0xFF); | |
| 389 | 367 | } |
| 390 | 368 | |
| 391 | -static inline uint16_t NVRAM_get_word (void *opaque, uint32_t addr) | |
| 369 | +static inline uint16_t NVRAM_get_word (m48t59_t *nvram, uint32_t addr) | |
| 392 | 370 | { |
| 393 | 371 | uint16_t tmp; |
| 394 | 372 | |
| 395 | - m48t59_set_addr(opaque, addr); | |
| 396 | - tmp = m48t59_read(opaque) << 8; | |
| 397 | - m48t59_set_addr(opaque, addr + 1); | |
| 398 | - tmp |= m48t59_read(opaque); | |
| 373 | + m48t59_set_addr(nvram, addr); | |
| 374 | + tmp = m48t59_read(nvram) << 8; | |
| 375 | + m48t59_set_addr(nvram, addr + 1); | |
| 376 | + tmp |= m48t59_read(nvram); | |
| 399 | 377 | |
| 400 | 378 | return tmp; |
| 401 | 379 | } |
| 402 | 380 | |
| 403 | -static inline void NVRAM_set_lword (void *opaque, uint32_t addr, | |
| 381 | +static inline void NVRAM_set_lword (m48t59_t *nvram, uint32_t addr, | |
| 404 | 382 | uint32_t value) |
| 405 | 383 | { |
| 406 | - m48t59_set_addr(opaque, addr); | |
| 407 | - m48t59_write(opaque, value >> 24); | |
| 408 | - m48t59_set_addr(opaque, addr + 1); | |
| 409 | - m48t59_write(opaque, (value >> 16) & 0xFF); | |
| 410 | - m48t59_set_addr(opaque, addr + 2); | |
| 411 | - m48t59_write(opaque, (value >> 8) & 0xFF); | |
| 412 | - m48t59_set_addr(opaque, addr + 3); | |
| 413 | - m48t59_write(opaque, value & 0xFF); | |
| 384 | + m48t59_set_addr(nvram, addr); | |
| 385 | + m48t59_write(nvram, value >> 24); | |
| 386 | + m48t59_set_addr(nvram, addr + 1); | |
| 387 | + m48t59_write(nvram, (value >> 16) & 0xFF); | |
| 388 | + m48t59_set_addr(nvram, addr + 2); | |
| 389 | + m48t59_write(nvram, (value >> 8) & 0xFF); | |
| 390 | + m48t59_set_addr(nvram, addr + 3); | |
| 391 | + m48t59_write(nvram, value & 0xFF); | |
| 414 | 392 | } |
| 415 | 393 | |
| 416 | -static inline uint32_t NVRAM_get_lword (void *opaque, uint32_t addr) | |
| 394 | +static inline uint32_t NVRAM_get_lword (m48t59_t *nvram, uint32_t addr) | |
| 417 | 395 | { |
| 418 | 396 | uint32_t tmp; |
| 419 | 397 | |
| 420 | - m48t59_set_addr(opaque, addr); | |
| 421 | - tmp = m48t59_read(opaque) << 24; | |
| 422 | - m48t59_set_addr(opaque, addr + 1); | |
| 423 | - tmp |= m48t59_read(opaque) << 16; | |
| 424 | - m48t59_set_addr(opaque, addr + 2); | |
| 425 | - tmp |= m48t59_read(opaque) << 8; | |
| 426 | - m48t59_set_addr(opaque, addr + 3); | |
| 427 | - tmp |= m48t59_read(opaque); | |
| 398 | + m48t59_set_addr(nvram, addr); | |
| 399 | + tmp = m48t59_read(nvram) << 24; | |
| 400 | + m48t59_set_addr(nvram, addr + 1); | |
| 401 | + tmp |= m48t59_read(nvram) << 16; | |
| 402 | + m48t59_set_addr(nvram, addr + 2); | |
| 403 | + tmp |= m48t59_read(nvram) << 8; | |
| 404 | + m48t59_set_addr(nvram, addr + 3); | |
| 405 | + tmp |= m48t59_read(nvram); | |
| 428 | 406 | |
| 429 | 407 | return tmp; |
| 430 | 408 | } |
| ... | ... | @@ -444,7 +422,7 @@ static uint16_t NVRAM_crc_update (uint16_t prev, uint16_t value) |
| 444 | 422 | return tmp; |
| 445 | 423 | } |
| 446 | 424 | |
| 447 | -static void NVRAM_set_crc (void *opaque, uint32_t addr, | |
| 425 | +static void NVRAM_set_crc (m48t59_t *nvram, uint32_t addr, | |
| 448 | 426 | uint32_t start, uint32_t count) |
| 449 | 427 | { |
| 450 | 428 | uint32_t i; |
| ... | ... | @@ -455,74 +433,74 @@ static void NVRAM_set_crc (void *opaque, uint32_t addr, |
| 455 | 433 | odd = 1; |
| 456 | 434 | count &= ~1; |
| 457 | 435 | for (i = 0; i != count; i++) { |
| 458 | - crc = NVRAM_crc_update(crc, NVRAM_get_word(opaque, start + i)); | |
| 436 | + crc = NVRAM_crc_update(crc, NVRAM_get_word(nvram, start + i)); | |
| 459 | 437 | } |
| 460 | 438 | if (odd) { |
| 461 | - crc = NVRAM_crc_update(crc, NVRAM_get_byte(opaque, start + i) << 8); | |
| 439 | + crc = NVRAM_crc_update(crc, NVRAM_get_byte(nvram, start + i) << 8); | |
| 462 | 440 | } |
| 463 | - NVRAM_set_word(opaque, addr, crc); | |
| 441 | + NVRAM_set_word(nvram, addr, crc); | |
| 464 | 442 | } |
| 465 | 443 | |
| 466 | 444 | static void prep_NVRAM_init (void) |
| 467 | 445 | { |
| 468 | - void *opaque; | |
| 446 | + m48t59_t *nvram; | |
| 469 | 447 | |
| 470 | - opaque = m48t59_init(8, 0x0074, NVRAM_SIZE); | |
| 448 | + nvram = m48t59_init(8, 0x0074, NVRAM_SIZE); | |
| 471 | 449 | /* NVRAM header */ |
| 472 | 450 | /* 0x00: NVRAM size in kB */ |
| 473 | - NVRAM_set_word(opaque, 0x00, NVRAM_SIZE >> 10); | |
| 451 | + NVRAM_set_word(nvram, 0x00, NVRAM_SIZE >> 10); | |
| 474 | 452 | /* 0x02: NVRAM version */ |
| 475 | - NVRAM_set_byte(opaque, 0x02, 0x01); | |
| 453 | + NVRAM_set_byte(nvram, 0x02, 0x01); | |
| 476 | 454 | /* 0x03: NVRAM revision */ |
| 477 | - NVRAM_set_byte(opaque, 0x03, 0x01); | |
| 455 | + NVRAM_set_byte(nvram, 0x03, 0x01); | |
| 478 | 456 | /* 0x08: last OS */ |
| 479 | - NVRAM_set_byte(opaque, 0x08, 0x00); /* Unknown */ | |
| 457 | + NVRAM_set_byte(nvram, 0x08, 0x00); /* Unknown */ | |
| 480 | 458 | /* 0x09: endian */ |
| 481 | - NVRAM_set_byte(opaque, 0x09, 'B'); /* Big-endian */ | |
| 459 | + NVRAM_set_byte(nvram, 0x09, 'B'); /* Big-endian */ | |
| 482 | 460 | /* 0x0A: OSArea usage */ |
| 483 | - NVRAM_set_byte(opaque, 0x0A, 0x00); /* Empty */ | |
| 461 | + NVRAM_set_byte(nvram, 0x0A, 0x00); /* Empty */ | |
| 484 | 462 | /* 0x0B: PM mode */ |
| 485 | - NVRAM_set_byte(opaque, 0x0B, 0x00); /* Normal */ | |
| 463 | + NVRAM_set_byte(nvram, 0x0B, 0x00); /* Normal */ | |
| 486 | 464 | /* Restart block description record */ |
| 487 | 465 | /* 0x0C: restart block version */ |
| 488 | - NVRAM_set_word(opaque, 0x0C, 0x01); | |
| 466 | + NVRAM_set_word(nvram, 0x0C, 0x01); | |
| 489 | 467 | /* 0x0E: restart block revision */ |
| 490 | - NVRAM_set_word(opaque, 0x0E, 0x01); | |
| 468 | + NVRAM_set_word(nvram, 0x0E, 0x01); | |
| 491 | 469 | /* 0x20: restart address */ |
| 492 | - NVRAM_set_lword(opaque, 0x20, 0x00); | |
| 470 | + NVRAM_set_lword(nvram, 0x20, 0x00); | |
| 493 | 471 | /* 0x24: save area address */ |
| 494 | - NVRAM_set_lword(opaque, 0x24, 0x00); | |
| 472 | + NVRAM_set_lword(nvram, 0x24, 0x00); | |
| 495 | 473 | /* 0x28: save area length */ |
| 496 | - NVRAM_set_lword(opaque, 0x28, 0x00); | |
| 474 | + NVRAM_set_lword(nvram, 0x28, 0x00); | |
| 497 | 475 | /* 0x1C: checksum of restart block */ |
| 498 | - NVRAM_set_crc(opaque, 0x1C, 0x0C, 32); | |
| 476 | + NVRAM_set_crc(nvram, 0x1C, 0x0C, 32); | |
| 499 | 477 | |
| 500 | 478 | /* Security section */ |
| 501 | 479 | /* Set all to zero */ |
| 502 | 480 | /* 0xC4: pointer to global environment area */ |
| 503 | - NVRAM_set_lword(opaque, 0xC4, 0x0100); | |
| 481 | + NVRAM_set_lword(nvram, 0xC4, 0x0100); | |
| 504 | 482 | /* 0xC8: size of global environment area */ |
| 505 | - NVRAM_set_lword(opaque, 0xC8, | |
| 483 | + NVRAM_set_lword(nvram, 0xC8, | |
| 506 | 484 | NVRAM_END - NVRAM_OSAREA_SIZE - NVRAM_CONFSIZE - 0x0100); |
| 507 | 485 | /* 0xD4: pointer to configuration area */ |
| 508 | - NVRAM_set_lword(opaque, 0xD4, NVRAM_END - NVRAM_CONFSIZE); | |
| 486 | + NVRAM_set_lword(nvram, 0xD4, NVRAM_END - NVRAM_CONFSIZE); | |
| 509 | 487 | /* 0xD8: size of configuration area */ |
| 510 | - NVRAM_set_lword(opaque, 0xD8, NVRAM_CONFSIZE); | |
| 488 | + NVRAM_set_lword(nvram, 0xD8, NVRAM_CONFSIZE); | |
| 511 | 489 | /* 0xE8: pointer to OS specific area */ |
| 512 | - NVRAM_set_lword(opaque, 0xE8, | |
| 490 | + NVRAM_set_lword(nvram, 0xE8, | |
| 513 | 491 | NVRAM_END - NVRAM_CONFSIZE - NVRAM_OSAREA_SIZE); |
| 514 | 492 | /* 0xD8: size of OS specific area */ |
| 515 | - NVRAM_set_lword(opaque, 0xEC, NVRAM_OSAREA_SIZE); | |
| 493 | + NVRAM_set_lword(nvram, 0xEC, NVRAM_OSAREA_SIZE); | |
| 516 | 494 | |
| 517 | 495 | /* Configuration area */ |
| 518 | 496 | /* RTC init */ |
| 519 | - // NVRAM_set_lword(opaque, 0x1FFC, 0x50); | |
| 497 | + // NVRAM_set_lword(nvram, 0x1FFC, 0x50); | |
| 520 | 498 | |
| 521 | 499 | /* 0x04: checksum 0 => OS area */ |
| 522 | - NVRAM_set_crc(opaque, 0x04, 0x00, | |
| 500 | + NVRAM_set_crc(nvram, 0x04, 0x00, | |
| 523 | 501 | NVRAM_END - NVRAM_CONFSIZE - NVRAM_OSAREA_SIZE); |
| 524 | 502 | /* 0x06: checksum of config area */ |
| 525 | - NVRAM_set_crc(opaque, 0x06, NVRAM_END - NVRAM_CONFSIZE, NVRAM_CONFSIZE); | |
| 503 | + NVRAM_set_crc(nvram, 0x06, NVRAM_END - NVRAM_CONFSIZE, NVRAM_CONFSIZE); | |
| 526 | 504 | } |
| 527 | 505 | |
| 528 | 506 | int load_initrd (const char *filename, uint8_t *addr) | ... | ... |