- partial save/restore support for USB MSD devices (TODO: buffers and SCSI
emulation status not saved) - changed type of member 'mode' to simplify save/restore
This commit is contained in:
parent
98acd5ef2e
commit
bb27085003
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// $Id: usb_msd.cc,v 1.3 2007-03-25 17:37:59 vruppert Exp $
|
||||
// $Id: usb_msd.cc,v 1.4 2007-04-09 09:04:54 vruppert Exp $
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Copyright (C) 2007 Volker Ruppert
|
||||
@ -36,6 +36,13 @@
|
||||
|
||||
#define LOG_THIS
|
||||
|
||||
enum USBMSDMode {
|
||||
USB_MSDM_CBW,
|
||||
USB_MSDM_DATAOUT,
|
||||
USB_MSDM_DATAIN,
|
||||
USB_MSDM_CSW
|
||||
};
|
||||
|
||||
struct usb_msd_cbw {
|
||||
Bit32u sig;
|
||||
Bit32u tag;
|
||||
@ -154,6 +161,20 @@ bx_bool usb_msd_device_t::init(const char *filename)
|
||||
}
|
||||
}
|
||||
|
||||
#if BX_SUPPORT_SAVE_RESTORE
|
||||
void usb_msd_device_t::register_state_specific(bx_list_c *parent)
|
||||
{
|
||||
bx_list_c *list = new bx_list_c(parent, "s", "USB MSD Device State", 7);
|
||||
new bx_shadow_num_c(list, "mode", &s.mode);
|
||||
new bx_shadow_num_c(list, "scsi_len", &s.scsi_len);
|
||||
new bx_shadow_num_c(list, "usb_len", &s.usb_len);
|
||||
new bx_shadow_num_c(list, "data_len", &s.data_len);
|
||||
new bx_shadow_num_c(list, "residue", &s.residue);
|
||||
new bx_shadow_num_c(list, "tag", &s.tag);
|
||||
new bx_shadow_num_c(list, "result", &s.result);
|
||||
}
|
||||
#endif
|
||||
|
||||
void usb_msd_device_t::handle_reset()
|
||||
{
|
||||
BX_DEBUG(("Reset"));
|
||||
@ -345,7 +366,7 @@ int usb_msd_device_t::handle_data(USBPacket *p)
|
||||
if (s.residue && s.usb_len) {
|
||||
s.data_len -= s.usb_len;
|
||||
if (s.data_len == 0)
|
||||
s.mode = USB_MSDM_CSW;
|
||||
s.mode = USB_MSDM_CSW;
|
||||
s.usb_len = 0;
|
||||
}
|
||||
if (s.usb_len) {
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// $Id: usb_msd.h,v 1.2 2007-03-24 11:43:41 vruppert Exp $
|
||||
// $Id: usb_msd.h,v 1.3 2007-04-09 09:04:54 vruppert Exp $
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Copyright (C) 2007 Volker Ruppert
|
||||
@ -25,13 +25,6 @@
|
||||
|
||||
class scsi_device_t;
|
||||
|
||||
enum USBMSDMode {
|
||||
USB_MSDM_CBW,
|
||||
USB_MSDM_DATAOUT,
|
||||
USB_MSDM_DATAIN,
|
||||
USB_MSDM_CSW
|
||||
};
|
||||
|
||||
|
||||
class usb_msd_device_t : public usb_device_t {
|
||||
public:
|
||||
@ -42,6 +35,9 @@ public:
|
||||
virtual void handle_reset();
|
||||
virtual int handle_control(int request, int value, int index, int length, Bit8u *data);
|
||||
virtual int handle_data(USBPacket *p);
|
||||
#if BX_SUPPORT_SAVE_RESTORE
|
||||
virtual void register_state_specific(bx_list_c *parent);
|
||||
#endif
|
||||
protected:
|
||||
void copy_data();
|
||||
void send_status();
|
||||
@ -50,7 +46,7 @@ protected:
|
||||
|
||||
private:
|
||||
struct {
|
||||
enum USBMSDMode mode;
|
||||
Bit8u mode;
|
||||
Bit32u scsi_len;
|
||||
Bit8u *scsi_buf;
|
||||
Bit32u usb_len;
|
||||
|
Loading…
x
Reference in New Issue
Block a user