Commit 12a71a027c49db34d88ad69989d7c0bf6cca658d

Authored by Blue Swirl
1 parent a71836de

Clean up fdc qdev conversion

Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
Showing 1 changed file with 65 additions and 74 deletions
hw/fdc.c
... ... @@ -477,7 +477,6 @@ struct fdctrl_t {
477 477 /* HW */
478 478 qemu_irq irq;
479 479 int dma_chann;
480   - target_phys_addr_t io_base;
481 480 /* Controller state */
482 481 QEMUTimer *result_timer;
483 482 uint8_t sra;
... ... @@ -512,8 +511,6 @@ struct fdctrl_t {
512 511 /* Floppy drives */
513 512 fdrive_t drives[MAX_FD];
514 513 int reset_sensei;
515   - uint32_t strict_io;
516   - uint32_t mem_mapped;
517 514 };
518 515  
519 516 static uint32_t fdctrl_read (void *opaque, uint32_t reg)
... ... @@ -1855,39 +1852,12 @@ static void fdctrl_result_timer(void *opaque)
1855 1852 }
1856 1853  
1857 1854 /* Init functions */
1858   -static void fdctrl_init_common (fdctrl_t *fdctrl, int dma_chann,
1859   - target_phys_addr_t io_base,
1860   - BlockDriverState **fds)
  1855 +static void fdctrl_connect_drives(fdctrl_t *fdctrl, BlockDriverState **fds)
1861 1856 {
1862   - int i, j;
1863   -
1864   - /* Fill 'command_to_handler' lookup table */
1865   - for (i = ARRAY_SIZE(handlers) - 1; i >= 0; i--) {
1866   - for (j = 0; j < sizeof(command_to_handler); j++) {
1867   - if ((j & handlers[i].mask) == handlers[i].value)
1868   - command_to_handler[j] = i;
1869   - }
1870   - }
  1857 + unsigned int i;
1871 1858  
1872   - FLOPPY_DPRINTF("init controller\n");
1873   - fdctrl->fifo = qemu_memalign(512, FD_SECTOR_LEN);
1874   - fdctrl->result_timer = qemu_new_timer(vm_clock,
1875   - fdctrl_result_timer, fdctrl);
1876   -
1877   - fdctrl->version = 0x90; /* Intel 82078 controller */
1878   - fdctrl->dma_chann = dma_chann;
1879   - fdctrl->io_base = io_base;
1880   - fdctrl->config = FD_CONFIG_EIS | FD_CONFIG_EFIFO; /* Implicit seek, polling & FIFO enabled */
1881   - if (fdctrl->dma_chann != -1) {
1882   - DMA_register_channel(dma_chann, &fdctrl_transfer_handler, fdctrl);
1883   - }
1884 1859 for (i = 0; i < MAX_FD; i++) {
1885 1860 fd_init(&fdctrl->drives[i], fds[i]);
1886   - }
1887   - fdctrl_external_reset(fdctrl);
1888   - register_savevm("fdc", io_base, 2, fdc_save, fdc_load, fdctrl);
1889   - qemu_register_reset(fdctrl_external_reset, fdctrl);
1890   - for (i = 0; i < MAX_FD; i++) {
1891 1861 fd_revalidate(&fdctrl->drives[i]);
1892 1862 }
1893 1863 }
... ... @@ -1901,9 +1871,6 @@ fdctrl_t *fdctrl_init (qemu_irq irq, int dma_chann, int mem_mapped,
1901 1871 fdctrl_t *fdctrl;
1902 1872  
1903 1873 dev = qdev_create(NULL, "fdc");
1904   - qdev_prop_set_uint32(dev, "strict_io", 0);
1905   - qdev_prop_set_uint32(dev, "mem_mapped", mem_mapped);
1906   - qdev_prop_set_uint32(dev, "sun4m", 0);
1907 1874 qdev_init(dev);
1908 1875 s = sysbus_from_qdev(dev);
1909 1876 sysbus_connect_irq(s, 0, irq);
... ... @@ -1920,8 +1887,10 @@ fdctrl_t *fdctrl_init (qemu_irq irq, int dma_chann, int mem_mapped,
1920 1887 register_ioport_write((uint32_t)io_base + 0x07, 1, 1,
1921 1888 &fdctrl_write_port, fdctrl);
1922 1889 }
  1890 + fdctrl->dma_chann = dma_chann;
  1891 + DMA_register_channel(dma_chann, &fdctrl_transfer_handler, fdctrl);
1923 1892  
1924   - fdctrl_init_common(fdctrl, dma_chann, io_base, fds);
  1893 + fdctrl_connect_drives(fdctrl, fds);
1925 1894  
1926 1895 return fdctrl;
1927 1896 }
... ... @@ -1933,10 +1902,7 @@ fdctrl_t *sun4m_fdctrl_init (qemu_irq irq, target_phys_addr_t io_base,
1933 1902 SysBusDevice *s;
1934 1903 fdctrl_t *fdctrl;
1935 1904  
1936   - dev = qdev_create(NULL, "fdc");
1937   - qdev_prop_set_uint32(dev, "strict_io", 1);
1938   - qdev_prop_set_uint32(dev, "mem_mapped", 1);
1939   - qdev_prop_set_uint32(dev, "sun4m", 1);
  1905 + dev = qdev_create(NULL, "SUNW,fdtwo");
1940 1906 qdev_init(dev);
1941 1907 s = sysbus_from_qdev(dev);
1942 1908 sysbus_connect_irq(s, 0, irq);
... ... @@ -1944,60 +1910,85 @@ fdctrl_t *sun4m_fdctrl_init (qemu_irq irq, target_phys_addr_t io_base,
1944 1910 *fdc_tc = qdev_get_gpio_in(dev, 0);
1945 1911  
1946 1912 fdctrl = FROM_SYSBUS(fdctrl_t, s);
1947   - fdctrl_init_common(fdctrl, -1, io_base, fds);
  1913 +
  1914 + fdctrl->dma_chann = -1;
  1915 +
  1916 + fdctrl_connect_drives(fdctrl, fds);
1948 1917  
1949 1918 return fdctrl;
1950 1919 }
1951 1920  
1952   -static void fdc_init1(SysBusDevice *dev)
  1921 +static void fdctrl_init_common(SysBusDevice *dev, fdctrl_t *fdctrl,
  1922 + int is_sun4m, int io)
1953 1923 {
1954   - fdctrl_t *s = FROM_SYSBUS(fdctrl_t, dev);
1955   - int io;
  1924 + int i, j;
  1925 + static int command_tables_inited = 0;
1956 1926  
1957   - sysbus_init_irq(dev, &s->irq);
  1927 + sysbus_init_irq(dev, &fdctrl->irq);
1958 1928 qdev_init_gpio_in(&dev->qdev, fdctrl_handle_tc, 1);
1959   - if (s->strict_io) {
1960   - io = cpu_register_io_memory(fdctrl_mem_read_strict,
1961   - fdctrl_mem_write_strict, s);
1962   - } else {
1963   - io = cpu_register_io_memory(fdctrl_mem_read, fdctrl_mem_write, s);
1964   - }
1965 1929 sysbus_init_mmio(dev, 0x08, io);
  1930 +
  1931 + /* Fill 'command_to_handler' lookup table */
  1932 + if (!command_tables_inited) {
  1933 + command_tables_inited = 1;
  1934 + for (i = ARRAY_SIZE(handlers) - 1; i >= 0; i--) {
  1935 + for (j = 0; j < sizeof(command_to_handler); j++) {
  1936 + if ((j & handlers[i].mask) == handlers[i].value) {
  1937 + command_to_handler[j] = i;
  1938 + }
  1939 + }
  1940 + }
  1941 + }
  1942 +
  1943 + FLOPPY_DPRINTF("init controller\n");
  1944 + fdctrl->fifo = qemu_memalign(512, FD_SECTOR_LEN);
  1945 + fdctrl->result_timer = qemu_new_timer(vm_clock,
  1946 + fdctrl_result_timer, fdctrl);
  1947 +
  1948 + fdctrl->version = 0x90; /* Intel 82078 controller */
  1949 + fdctrl->config = FD_CONFIG_EIS | FD_CONFIG_EFIFO; /* Implicit seek, polling & FIFO enabled */
  1950 + fdctrl->sun4m = is_sun4m;
  1951 +
  1952 + fdctrl_external_reset(fdctrl);
  1953 + register_savevm("fdc", -1, 2, fdc_save, fdc_load, fdctrl);
  1954 + qemu_register_reset(fdctrl_external_reset, fdctrl);
1966 1955 }
1967 1956  
  1957 +static void fdc_init1(SysBusDevice *dev)
  1958 +{
  1959 + fdctrl_t *fdctrl = FROM_SYSBUS(fdctrl_t, dev);
  1960 + int io;
  1961 +
  1962 + io = cpu_register_io_memory(fdctrl_mem_read, fdctrl_mem_write, fdctrl);
  1963 + fdctrl_init_common(dev, fdctrl, 0, io);
  1964 +}
  1965 +
  1966 +static void sun4m_fdc_init1(SysBusDevice *dev)
  1967 +{
  1968 + fdctrl_t *fdctrl = FROM_SYSBUS(fdctrl_t, dev);
  1969 + int io;
  1970 +
  1971 + io = cpu_register_io_memory(fdctrl_mem_read_strict,
  1972 + fdctrl_mem_write_strict, fdctrl);
  1973 + fdctrl_init_common(dev, fdctrl, 1, io);
  1974 +}
1968 1975  
1969 1976 static SysBusDeviceInfo fdc_info = {
1970 1977 .init = fdc_init1,
1971 1978 .qdev.name = "fdc",
1972 1979 .qdev.size = sizeof(fdctrl_t),
1973   - .qdev.props = (Property[]) {
1974   - {
1975   - .name = "io_base",
1976   - .info = &qdev_prop_taddr,
1977   - .offset = offsetof(fdctrl_t, io_base),
1978   - },
1979   - {
1980   - .name = "strict_io",
1981   - .info = &qdev_prop_uint32,
1982   - .offset = offsetof(fdctrl_t, strict_io),
1983   - },
1984   - {
1985   - .name = "mem_mapped",
1986   - .info = &qdev_prop_uint32,
1987   - .offset = offsetof(fdctrl_t, mem_mapped),
1988   - },
1989   - {
1990   - .name = "sun4m",
1991   - .info = &qdev_prop_uint32,
1992   - .offset = offsetof(fdctrl_t, sun4m),
1993   - },
1994   - {/* end of properties */}
1995   - }
  1980 +};
  1981 +
  1982 +static SysBusDeviceInfo sun4m_fdc_info = {
  1983 + .init = sun4m_fdc_init1,
  1984 + .qdev.name = "SUNW,fdtwo",
  1985 + .qdev.size = sizeof(fdctrl_t),
1996 1986 };
1997 1987  
1998 1988 static void fdc_register_devices(void)
1999 1989 {
2000 1990 sysbus_register_withprop(&fdc_info);
  1991 + sysbus_register_withprop(&sun4m_fdc_info);
2001 1992 }
2002 1993  
2003 1994 device_init(fdc_register_devices)
... ...