diff --git a/bochs/config.cc b/bochs/config.cc index 1dec7acad..55a849500 100755 --- a/bochs/config.cc +++ b/bochs/config.cc @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////// -// $Id: config.cc,v 1.26 2004-12-16 19:03:28 vruppert Exp $ +// $Id: config.cc,v 1.27 2004-12-30 14:50:36 vruppert Exp $ ///////////////////////////////////////////////////////////////////////// // // Copyright (C) 2002 MandrakeSoft S.A. @@ -923,27 +923,32 @@ void bx_init_options () "I/O base adress of USB hub", 0, 0xffe0, (i==0)?0xff80 : 0); - bx_options.usb[i].Oirq = new bx_param_num_c ( - BXP_USBx_IRQ(i+1), - "IRQ", - "IRQ used by USB hub", - 0, 15, - (i==0)?10 : 0); - deplist = new bx_list_c (BXP_NULL, 2); + bx_options.usb[i].Oport1 = new bx_param_string_c ( + BXP_USBx_PORT1(i+1), + "port #1 device", + "Device connected to USB port #1", + "", BX_PATHNAME_LEN); + bx_options.usb[i].Oport2 = new bx_param_string_c ( + BXP_USBx_PORT2(i+1), + "port #2 device", + "Device connected to USB port #2", + "", BX_PATHNAME_LEN); + deplist = new bx_list_c (BXP_NULL, 3); deplist->add (bx_options.usb[i].Oioaddr); - deplist->add (bx_options.usb[i].Oirq); + deplist->add (bx_options.usb[i].Oport1); + deplist->add (bx_options.usb[i].Oport2); bx_options.usb[i].Oenabled->set_dependent_list (deplist); // add to menu *par_ser_ptr++ = bx_options.usb[i].Oenabled; *par_ser_ptr++ = bx_options.usb[i].Oioaddr; - *par_ser_ptr++ = bx_options.usb[i].Oirq; + *par_ser_ptr++ = bx_options.usb[i].Oport1; + *par_ser_ptr++ = bx_options.usb[i].Oport2; bx_options.usb[i].Oioaddr->set_ask_format ("Enter new ioaddr: [0x%x] "); bx_options.usb[i].Oioaddr->set_base (16); bx_options.usb[i].Oioaddr->set_group (strdup(group)); - bx_options.usb[i].Oioaddr->set_ask_format ("Enter new IRQ: [%d] "); - bx_options.usb[i].Oirq->set_options (bx_param_num_c::USE_SPIN_CONTROL); - bx_options.usb[i].Oirq->set_group (strdup(group)); + bx_options.usb[i].Oport1->set_group (strdup(group)); + bx_options.usb[i].Oport2->set_group (strdup(group)); } // add final NULL at the end, and build the menu *par_ser_ptr = NULL; @@ -1776,6 +1781,12 @@ void bx_reset_options () bx_options.par[i].Oenabled->reset(); bx_options.par[i].Ooutfile->reset(); } + for (i=0; ireset(); + bx_options.usb[i].Oioaddr->reset(); + bx_options.usb[i].Oport1->reset(); + bx_options.usb[i].Oport2->reset(); + } // rom images bx_options.rom.Opath->reset(); @@ -2691,11 +2702,17 @@ parse_line_formatted(char *context, int num_params, char *params[]) bx_options.usb[0].Oioaddr->set (strtoul (¶ms[i][7], NULL, 10)); bx_options.usb[0].Oenabled->set (1); } + else if (!strncmp(params[i], "port1=", 6)) { + bx_options.usb[0].Oport1->set (strdup(¶ms[i][6])); + } + else if (!strncmp(params[i], "port2=", 6)) { + bx_options.usb[0].Oport2->set (strdup(¶ms[i][6])); + } else if (!strncmp(params[i], "irq=", 4)) { - bx_options.usb[0].Oirq->set (atol(¶ms[i][4])); + PARSE_WARN(("%s: usb irq is now deprecated (assigned by BIOS).", context)); } else { - PARSE_ERR(("%s: unknown parameter for usb1 ignored.", context)); + PARSE_WARN(("%s: unknown parameter '%s' for usb1 ignored.", context, params[i])); } } } @@ -3310,7 +3327,7 @@ parse_line_formatted(char *context, int num_params, char *params[]) if (valid == 0x07) { bx_options.ne2k.Oenabled->set (1); } - else { + else if (valid < 0x80) { PARSE_ERR(("%s: ne2k directive incomplete (ioaddr, irq and mac are required)", context)); } } @@ -3370,7 +3387,7 @@ parse_line_formatted(char *context, int num_params, char *params[]) if (valid == 0x07) { bx_options.pnic.Oenabled->set (1); } - else { + else if (valid < 0x80) { PARSE_ERR(("%s: pnic directive incomplete (ioaddr, irq and mac are required)", context)); } } @@ -3639,8 +3656,8 @@ bx_write_usb_options (FILE *fp, bx_usb_options *opt, int n) { fprintf (fp, "usb%d: enabled=%d", n, opt->Oenabled->get ()); if (opt->Oenabled->get ()) { - fprintf (fp, ", ioaddr=0x%04x, irq=%d", opt->Oioaddr->get (), - opt->Oirq->get ()); + fprintf (fp, ", ioaddr=0x%04x, port1=%s, port2=%s", opt->Oioaddr->get (), + opt->Oport1->getptr (), opt->Oport2->getptr ()); } fprintf (fp, "\n"); return 0; @@ -3675,7 +3692,7 @@ bx_write_ne2k_options (FILE *fp, bx_ne2k_options *opt) fprintf (fp, "ne2k: enabled=%d", opt->Oenabled->get ()); if (opt->Oenabled->get ()) { char *ptr = opt->Omacaddr->getptr (); - fprintf (fp, ", ioaddr=0x%x, irq=%d, mac=%02x:%02x:%02x:%02x:%02x:%02x, ethmod=%s, ethdev=%s, script=%s\n", + fprintf (fp, ", ioaddr=0x%x, irq=%d, mac=%02x:%02x:%02x:%02x:%02x:%02x, ethmod=%s, ethdev=%s, script=%s", opt->Oioaddr->get (), opt->Oirq->get (), (unsigned int)(0xff & ptr[0]), @@ -3697,7 +3714,7 @@ bx_write_sb16_options (FILE *fp, bx_sb16_options *opt) { fprintf (fp, "sb16: enabled=%d", opt->Oenabled->get ()); if (opt->Oenabled->get ()) { - fprintf (fp, "sb16: midimode=%d, midi=%s, wavemode=%d, wave=%s, loglevel=%d, log=%s, dmatimer=%d\n", + fprintf (fp, ", midimode=%d, midi=%s, wavemode=%d, wave=%s, loglevel=%d, log=%s, dmatimer=%d", opt->Omidimode->get (), opt->Omidifile->getptr (), opt->Owavemode->get (), @@ -3825,7 +3842,7 @@ bx_write_configuration (char *rc, int overwrite) fprintf (fp, "vgaromimage: file=\"%s\"\n", bx_options.vgarom.Opath->getptr ()); else fprintf (fp, "# no vgaromimage\n"); - fprintf (fp, "boot: %s", bx_options.Obootdrive[0]->get_choice(bx_options.Obootdrive[0]->get())); + fprintf (fp, "boot: %s", bx_options.Obootdrive[0]->get_choice(bx_options.Obootdrive[0]->get() - 1)); for (i=1; i<3; i++) { if (bx_options.Obootdrive[i]->get() != BX_BOOT_NONE) { fprintf (fp, ", %s", bx_options.Obootdrive[i]->get_choice(bx_options.Obootdrive[i]->get())); diff --git a/bochs/gui/siminterface.h b/bochs/gui/siminterface.h index cfcb3f0eb..036bed9e4 100644 --- a/bochs/gui/siminterface.h +++ b/bochs/gui/siminterface.h @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////// -// $Id: siminterface.h,v 1.132 2004-12-16 19:03:28 vruppert Exp $ +// $Id: siminterface.h,v 1.133 2004-12-30 14:50:37 vruppert Exp $ ///////////////////////////////////////////////////////////////////////// // // Before I can describe what this file is for, I have to make the @@ -329,10 +329,11 @@ typedef enum { BXP_COM4_ENABLED, BXP_COM4_MODE, BXP_COM4_PATH, -#define BXP_PARAMS_PER_USB_HUB 3 +#define BXP_PARAMS_PER_USB_HUB 4 BXP_USB1_ENABLED, BXP_USB1_IOADDR, - BXP_USB1_IRQ, + BXP_USB1_PORT1, + BXP_USB1_PORT2, BXP_PRIVATE_COLORMAP, BXP_FULLSCREEN, BXP_SCREENMODE, @@ -513,8 +514,10 @@ typedef enum { (bx_id)(BXP_USB1_ENABLED + (((x)-1)*BXP_PARAMS_PER_USB_HUB)) #define BXP_USBx_IOADDR(x) \ (bx_id)(BXP_USB1_IOADDR + (((x)-1)*BXP_PARAMS_PER_USB_HUB)) -#define BXP_USBx_IRQ(x) \ - (bx_id)(BXP_USB1_IRQ + (((x)-1)*BXP_PARAMS_PER_USB_HUB)) +#define BXP_USBx_PORT1(x) \ + (bx_id)(BXP_USB1_PORT1 + (((x)-1)*BXP_PARAMS_PER_USB_HUB)) +#define BXP_USBx_PORT2(x) \ + (bx_id)(BXP_USB1_PORT2 + (((x)-1)*BXP_PARAMS_PER_USB_HUB)) // use x=1,2 #define BXP_PARPORTx_ENABLED(x) \ @@ -1345,7 +1348,8 @@ typedef struct { typedef struct { bx_param_bool_c *Oenabled; bx_param_num_c *Oioaddr; - bx_param_num_c *Oirq; + bx_param_string_c *Oport1; + bx_param_string_c *Oport2; } bx_usb_options; typedef struct { diff --git a/bochs/iodev/pciusb.cc b/bochs/iodev/pciusb.cc index 53b96fdbf..19f530b73 100644 --- a/bochs/iodev/pciusb.cc +++ b/bochs/iodev/pciusb.cc @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////// -// $Id: pciusb.cc,v 1.17 2004-12-26 09:28:35 vruppert Exp $ +// $Id: pciusb.cc,v 1.18 2004-12-30 14:50:37 vruppert Exp $ ///////////////////////////////////////////////////////////////////////// // // Copyright (C) 2004 MandrakeSoft S.A. @@ -118,9 +118,8 @@ bx_pciusb_c::init(void) BX_USB_THIS hub[0].base_ioaddr = 0x0; Bit16u base_ioaddr = bx_options.usb[0].Oioaddr->get(); - Bit8u irq = bx_options.usb[0].Oirq->get(); - BX_INFO(("usb1 at 0x%04x-0x%04x irq %d", base_ioaddr, base_ioaddr+0x13, irq)); + BX_INFO(("usb1 at 0x%04x-0x%04x irq assigned by BIOS", base_ioaddr, base_ioaddr+0x13)); //FIXME: for now, we want a status bar // hub zero, port zero BX_USB_THIS hub[0].statusbar_id[0] = bx_gui->register_statusitem("USB");