Home | History | Annotate | Line # | Download | only in dev
ahcireg.h revision 1.1.88.1
      1       1.1    dyoung /* $NetBSD: ahcireg.h,v 1.1.88.1 2017/12/03 11:36:26 jdolecek Exp $ */
      2       1.1    dyoung 
      3       1.1    dyoung /*-
      4       1.1    dyoung  * Copyright (c) 2007 Ruslan Ermilov and Vsevolod Lobko.
      5       1.1    dyoung  * All rights reserved.
      6       1.1    dyoung  *
      7       1.1    dyoung  * Redistribution and use in source and binary forms, with or
      8       1.1    dyoung  * without modification, are permitted provided that the following
      9       1.1    dyoung  * conditions are met:
     10       1.1    dyoung  * 1. Redistributions of source code must retain the above copyright
     11       1.1    dyoung  *    notice, this list of conditions and the following disclaimer.
     12       1.1    dyoung  * 2. Redistributions in binary form must reproduce the above
     13       1.1    dyoung  *    copyright notice, this list of conditions and the following
     14       1.1    dyoung  *    disclaimer in the documentation and/or other materials provided
     15       1.1    dyoung  *    with the distribution.
     16       1.1    dyoung  * 3. The names of the authors may not be used to endorse or promote
     17       1.1    dyoung  *    products derived from this software without specific prior
     18       1.1    dyoung  *    written permission.
     19       1.1    dyoung  *
     20       1.1    dyoung  * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY
     21       1.1    dyoung  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
     22       1.1    dyoung  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
     23       1.1    dyoung  * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS
     24       1.1    dyoung  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
     25       1.1    dyoung  * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     26       1.1    dyoung  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
     27       1.1    dyoung  * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     28       1.1    dyoung  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
     29       1.1    dyoung  * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
     30       1.1    dyoung  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
     31       1.1    dyoung  * OF SUCH DAMAGE.
     32       1.1    dyoung  */
     33       1.1    dyoung #ifndef	_AHCIREG_H
     34       1.1    dyoung #define	_AHCIREG_H
     35       1.1    dyoung 
     36       1.1    dyoung #define ADMHCD_REG_CONTROL              0x00
     37       1.1    dyoung #define ADMHCD_REG_INTSTATUS            0x04
     38       1.1    dyoung #define ADMHCD_REG_INTENABLE            0x08
     39       1.1    dyoung #define ADMHCD_REG_HOSTCONTROL          0x10
     40       1.1    dyoung #define ADMHCD_REG_FMINTERVAL           0x18
     41       1.1    dyoung #define ADMHCD_REG_FMNUMBER             0x1c
     42       1.1    dyoung #define ADMHCD_REG_LSTHRESH             0x70
     43       1.1    dyoung #define ADMHCD_REG_RHDESCR              0x74
     44       1.1    dyoung #define ADMHCD_REG_PORTSTATUS0          0x78
     45       1.1    dyoung #define ADMHCD_REG_PORTSTATUS1          0x7c
     46       1.1    dyoung #define ADMHCD_REG_HOSTHEAD             0x80
     47       1.1    dyoung #define ADMHCD_NUMPORTS         2
     48       1.1    dyoung 
     49       1.1    dyoung #define ADMHCD_HOST_EN          0x00000001      /* Host enable */
     50       1.1    dyoung #define ADMHCD_SW_INTREQ        0x00000002      /* request software int */
     51       1.1    dyoung #define ADMHCD_SW_RESET         0x00000008      /* Reset */
     52       1.1    dyoung 
     53       1.1    dyoung #define ADMHCD_INT_TD           0x00100000      /* TD completed */
     54       1.1    dyoung #define ADMHCD_INT_SW           0x20000000      /* software interrupt */
     55       1.1    dyoung #define ADMHCD_INT_FATAL        0x40000000      /* Fatal interrupt */
     56       1.1    dyoung #define ADMHCD_INT_ACT          0x80000000      /* Interrupt active */
     57       1.1    dyoung 
     58       1.1    dyoung #define ADMHCD_STATE_RST        0x00000000      /* bus state reset */
     59       1.1    dyoung #define ADMHCD_STATE_RES        0x00000001      /* bus state resume */
     60       1.1    dyoung #define ADMHCD_STATE_OP         0x00000002      /* bus state operational */
     61       1.1    dyoung #define ADMHCD_STATE_SUS        0x00000003      /* bus state suspended */
     62       1.1    dyoung #define ADMHCD_DMA_EN           0x00000004      /* enable dma engine */
     63       1.1    dyoung 
     64       1.1    dyoung #define ADMHCD_NPS              0x00000020      /* No Power Switch */
     65       1.1    dyoung #define ADMHCD_LPSC             0x04000000      /* Local power switch change */
     66       1.1    dyoung 
     67       1.1    dyoung #define ADMHCD_CCS              0x00000001      /* current connect status */
     68       1.1    dyoung #define ADMHCD_PES              0x00000002      /* port enable status */
     69       1.1    dyoung #define ADMHCD_PSS              0x00000004      /* port suspend status */
     70       1.1    dyoung #define ADMHCD_POCI             0x00000008      /* port overcurrent indicator */
     71       1.1    dyoung #define ADMHCD_PRS              0x00000010      /* port reset status */
     72       1.1    dyoung #define ADMHCD_PPS              0x00000100      /* port power status */
     73       1.1    dyoung #define ADMHCD_LSDA             0x00000200      /* low speed device attached */
     74       1.1    dyoung #define ADMHCD_CSC              0x00010000      /* connect status change */
     75       1.1    dyoung #define ADMHCD_PESC             0x00020000      /* enable status change */
     76       1.1    dyoung #define ADMHCD_PSSC             0x00040000      /* suspend status change */
     77       1.1    dyoung #define ADMHCD_OCIC             0x00080000      /* overcurrent change*/
     78       1.1    dyoung #define ADMHCD_PRSC             0x00100000      /* reset status change */
     79       1.1    dyoung 
     80       1.1    dyoung struct admhcd_ed {
     81  1.1.88.1  jdolecek 	/* Don't change first four, they used for DMA */
     82  1.1.88.1  jdolecek 	volatile uint32_t                       control;
     83  1.1.88.1  jdolecek 	volatile struct admhcd_td               *tail;
     84  1.1.88.1  jdolecek 	volatile struct admhcd_td               *head;
     85  1.1.88.1  jdolecek 	volatile struct admhcd_ed               *next;
     86  1.1.88.1  jdolecek 	/* the rest is for the driver only: */
     87  1.1.88.1  jdolecek 	uint32_t				unused[4];
     88       1.1    dyoung } __attribute__ ((packed));
     89       1.1    dyoung 
     90       1.1    dyoung #define ADMHCD_ED_EPSHIFT       7               /* Shift for endpoint number */
     91       1.1    dyoung #define ADMHCD_ED_INT           0x00000800      /* Is this an int endpoint */
     92       1.1    dyoung #define ADMHCD_ED_SPEED         0x00002000      /* Is it a high speed dev? */
     93       1.1    dyoung #define ADMHCD_ED_SKIP          0x00004000      /* Skip this ED */
     94       1.1    dyoung #define ADMHCD_ED_FORMAT        0x00008000      /* Is this an isoc endpoint */
     95       1.1    dyoung #define ADMHCD_ED_MAXSHIFT      16              /* Shift for max packet size */
     96       1.1    dyoung 
     97       1.1    dyoung struct admhcd_td {
     98  1.1.88.1  jdolecek 	/* Don't change first four, they are used for DMA */
     99  1.1.88.1  jdolecek 	volatile uint32_t		control;
    100  1.1.88.1  jdolecek 	volatile uint32_t		buffer;
    101  1.1.88.1  jdolecek 	volatile uint32_t		buflen;
    102  1.1.88.1  jdolecek 	volatile struct admhcd_td	*next;
    103  1.1.88.1  jdolecek 	/* the rest is for the driver only: */
    104  1.1.88.1  jdolecek 	/* struct urb			*urb;
    105  1.1.88.1  jdolecek 	struct admhcd_td		*real; */
    106  1.1.88.1  jdolecek 	uint32_t			len;
    107  1.1.88.1  jdolecek 	uint32_t			unused[3];
    108       1.1    dyoung } __attribute__ ((packed));
    109       1.1    dyoung 
    110       1.1    dyoung #define ADMHCD_TD_OWN           0x80000000
    111       1.1    dyoung #define ADMHCD_TD_TOGGLE        0x00000000
    112       1.1    dyoung #define ADMHCD_TD_DATA0         0x01000000
    113       1.1    dyoung #define ADMHCD_TD_DATA1         0x01800000
    114       1.1    dyoung #define ADMHCD_TD_OUT           0x00200000
    115       1.1    dyoung #define ADMHCD_TD_IN            0x00400000
    116       1.1    dyoung #define ADMHCD_TD_SETUP         0x00000000
    117       1.1    dyoung #define ADMHCD_TD_ISO           0x00010000
    118       1.1    dyoung #define ADMHCD_TD_R             0x00040000
    119       1.1    dyoung #define ADMHCD_TD_INTEN         0x00010000
    120       1.1    dyoung 
    121       1.1    dyoung #define ADMHCD_TD_ERRMASK       0x78000000
    122       1.1    dyoung #define ADMHCD_TD_ERRSHIFT      27
    123       1.1    dyoung 
    124       1.1    dyoung #endif	/* _AHCIREG_H */
    125