cachepc-qemu

Fork of AMDESE/qemu with changes for cachepc side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-qemu
Log | Files | Refs | Submodules | LICENSE | sfeed.txt

hcd-ohci.h (3104B)


      1/*
      2 * QEMU USB OHCI Emulation
      3 * Copyright (c) 2004 Gianni Tedesco
      4 * Copyright (c) 2006 CodeSourcery
      5 * Copyright (c) 2006 Openedhand Ltd.
      6 *
      7 * This library is free software; you can redistribute it and/or
      8 * modify it under the terms of the GNU Lesser General Public
      9 * License as published by the Free Software Foundation; either
     10 * version 2.1 of the License, or (at your option) any later version.
     11 *
     12 * This library is distributed in the hope that it will be useful,
     13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
     14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     15 * Lesser General Public License for more details.
     16 *
     17 * You should have received a copy of the GNU Lesser General Public
     18 * License along with this library; if not, see <http://www.gnu.org/licenses/>.
     19 */
     20
     21#ifndef HCD_OHCI_H
     22#define HCD_OHCI_H
     23
     24#include "sysemu/dma.h"
     25#include "hw/usb.h"
     26#include "qom/object.h"
     27
     28/* Number of Downstream Ports on the root hub: */
     29#define OHCI_MAX_PORTS 15
     30
     31typedef struct OHCIPort {
     32    USBPort port;
     33    uint32_t ctrl;
     34} OHCIPort;
     35
     36typedef struct OHCIState {
     37    USBBus bus;
     38    qemu_irq irq;
     39    MemoryRegion mem;
     40    AddressSpace *as;
     41    uint32_t num_ports;
     42    const char *name;
     43
     44    QEMUTimer *eof_timer;
     45    int64_t sof_time;
     46
     47    /* OHCI state */
     48    /* Control partition */
     49    uint32_t ctl, status;
     50    uint32_t intr_status;
     51    uint32_t intr;
     52
     53    /* memory pointer partition */
     54    uint32_t hcca;
     55    uint32_t ctrl_head, ctrl_cur;
     56    uint32_t bulk_head, bulk_cur;
     57    uint32_t per_cur;
     58    uint32_t done;
     59    int32_t done_count;
     60
     61    /* Frame counter partition */
     62    uint16_t fsmps;
     63    uint8_t fit;
     64    uint16_t fi;
     65    uint8_t frt;
     66    uint16_t frame_number;
     67    uint16_t padding;
     68    uint32_t pstart;
     69    uint32_t lst;
     70
     71    /* Root Hub partition */
     72    uint32_t rhdesc_a, rhdesc_b;
     73    uint32_t rhstatus;
     74    OHCIPort rhport[OHCI_MAX_PORTS];
     75
     76    /* PXA27x Non-OHCI events */
     77    uint32_t hstatus;
     78    uint32_t hmask;
     79    uint32_t hreset;
     80    uint32_t htest;
     81
     82    /* SM501 local memory offset */
     83    dma_addr_t localmem_base;
     84
     85    /* Active packets.  */
     86    uint32_t old_ctl;
     87    USBPacket usb_packet;
     88    uint8_t usb_buf[8192];
     89    uint32_t async_td;
     90    bool async_complete;
     91
     92    void (*ohci_die)(struct OHCIState *ohci);
     93} OHCIState;
     94
     95#define TYPE_SYSBUS_OHCI "sysbus-ohci"
     96OBJECT_DECLARE_SIMPLE_TYPE(OHCISysBusState, SYSBUS_OHCI)
     97
     98struct OHCISysBusState {
     99    /*< private >*/
    100    SysBusDevice parent_obj;
    101    /*< public >*/
    102
    103    OHCIState ohci;
    104    char *masterbus;
    105    uint32_t num_ports;
    106    uint32_t firstport;
    107    dma_addr_t dma_offset;
    108};
    109
    110extern const VMStateDescription vmstate_ohci_state;
    111
    112void usb_ohci_init(OHCIState *ohci, DeviceState *dev, uint32_t num_ports,
    113                   dma_addr_t localmem_base, char *masterbus,
    114                   uint32_t firstport, AddressSpace *as,
    115                   void (*ohci_die_fn)(struct OHCIState *), Error **errp);
    116void ohci_bus_stop(OHCIState *ohci);
    117void ohci_stop_endpoints(OHCIState *ohci);
    118void ohci_hard_reset(OHCIState *ohci);
    119void ohci_sysbus_die(struct OHCIState *ohci);
    120
    121#endif