cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

aiclib.h (5876B)


      1/*
      2 * Largely written by Julian Elischer (julian@tfs.com)
      3 * for TRW Financial Systems.
      4 *
      5 * TRW Financial Systems, in accordance with their agreement with Carnegie
      6 * Mellon University, makes this software available to CMU to distribute
      7 * or use in any manner that they see fit as long as this message is kept with
      8 * the software. For this reason TFS also grants any other persons or
      9 * organisations permission to use or modify this software.
     10 *
     11 * TFS supplies this software to be publicly redistributed
     12 * on the understanding that TFS is not responsible for the correct
     13 * functioning of this software in any circumstances.
     14 *
     15 * Ported to run under 386BSD by Julian Elischer (julian@tfs.com) Sept 1992
     16 *
     17 * $FreeBSD: src/sys/cam/scsi/scsi_all.h,v 1.21 2002/10/08 17:12:44 ken Exp $
     18 *
     19 * Copyright (c) 2003 Adaptec Inc.
     20 * All rights reserved.
     21 *
     22 * Redistribution and use in source and binary forms, with or without
     23 * modification, are permitted provided that the following conditions
     24 * are met:
     25 * 1. Redistributions of source code must retain the above copyright
     26 *    notice, this list of conditions, and the following disclaimer,
     27 *    without modification.
     28 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
     29 *    substantially similar to the "NO WARRANTY" disclaimer below
     30 *    ("Disclaimer") and any redistribution must be conditioned upon
     31 *    including a substantially similar Disclaimer requirement for further
     32 *    binary redistribution.
     33 * 3. Neither the names of the above-listed copyright holders nor the names
     34 *    of any contributors may be used to endorse or promote products derived
     35 *    from this software without specific prior written permission.
     36 *
     37 * Alternatively, this software may be distributed under the terms of the
     38 * GNU General Public License ("GPL") version 2 as published by the Free
     39 * Software Foundation.
     40 *
     41 * NO WARRANTY
     42 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     43 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     44 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
     45 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     46 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     47 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     48 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     49 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
     50 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
     51 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     52 * POSSIBILITY OF SUCH DAMAGES.
     53 *
     54 * $Id$
     55 */
     56
     57#ifndef	_AICLIB_H
     58#define _AICLIB_H
     59
     60struct scsi_sense
     61{
     62	uint8_t opcode;
     63	uint8_t byte2;
     64	uint8_t unused[2];
     65	uint8_t length;
     66	uint8_t control;
     67};
     68
     69#define		SCSI_REV_0		0
     70#define		SCSI_REV_CCS		1
     71#define		SCSI_REV_2		2
     72#define		SCSI_REV_SPC		3
     73#define		SCSI_REV_SPC2		4
     74
     75struct scsi_sense_data
     76{
     77	uint8_t error_code;
     78#define	SSD_ERRCODE			0x7F
     79#define		SSD_CURRENT_ERROR	0x70
     80#define		SSD_DEFERRED_ERROR	0x71
     81#define	SSD_ERRCODE_VALID	0x80	
     82	uint8_t segment;
     83	uint8_t flags;
     84#define	SSD_KEY				0x0F
     85#define		SSD_KEY_NO_SENSE	0x00
     86#define		SSD_KEY_RECOVERED_ERROR	0x01
     87#define		SSD_KEY_NOT_READY	0x02
     88#define		SSD_KEY_MEDIUM_ERROR	0x03
     89#define		SSD_KEY_HARDWARE_ERROR	0x04
     90#define		SSD_KEY_ILLEGAL_REQUEST	0x05
     91#define		SSD_KEY_UNIT_ATTENTION	0x06
     92#define		SSD_KEY_DATA_PROTECT	0x07
     93#define		SSD_KEY_BLANK_CHECK	0x08
     94#define		SSD_KEY_Vendor_Specific	0x09
     95#define		SSD_KEY_COPY_ABORTED	0x0a
     96#define		SSD_KEY_ABORTED_COMMAND	0x0b		
     97#define		SSD_KEY_EQUAL		0x0c
     98#define		SSD_KEY_VOLUME_OVERFLOW	0x0d
     99#define		SSD_KEY_MISCOMPARE	0x0e
    100#define		SSD_KEY_RESERVED	0x0f			
    101#define	SSD_ILI		0x20
    102#define	SSD_EOM		0x40
    103#define	SSD_FILEMARK	0x80
    104	uint8_t info[4];
    105	uint8_t extra_len;
    106	uint8_t cmd_spec_info[4];
    107	uint8_t add_sense_code;
    108	uint8_t add_sense_code_qual;
    109	uint8_t fru;
    110	uint8_t sense_key_spec[3];
    111#define	SSD_SCS_VALID		0x80
    112#define SSD_FIELDPTR_CMD	0x40
    113#define SSD_BITPTR_VALID	0x08
    114#define SSD_BITPTR_VALUE	0x07
    115#define SSD_MIN_SIZE 18
    116	uint8_t extra_bytes[14];
    117#define SSD_FULL_SIZE sizeof(struct scsi_sense_data)
    118};
    119
    120/************************* Large Disk Handling ********************************/
    121static inline int
    122aic_sector_div(sector_t capacity, int heads, int sectors)
    123{
    124	/* ugly, ugly sector_div calling convention.. */
    125	sector_div(capacity, (heads * sectors));
    126	return (int)capacity;
    127}
    128
    129static inline uint32_t
    130scsi_4btoul(uint8_t *bytes)
    131{
    132	uint32_t rv;
    133
    134	rv = (bytes[0] << 24) |
    135	     (bytes[1] << 16) |
    136	     (bytes[2] << 8) |
    137	     bytes[3];
    138	return (rv);
    139}
    140
    141/* Macros for generating the elements of the PCI ID tables. */
    142
    143#define GETID(v, s) (unsigned)(((v) >> (s)) & 0xFFFF ?: PCI_ANY_ID)
    144
    145#define ID_C(x, c)						\
    146{								\
    147	GETID(x,32), GETID(x,48), GETID(x,0), GETID(x,16),	\
    148	(c) << 8, 0xFFFF00, 0					\
    149}
    150
    151#define ID2C(x)                          \
    152	ID_C(x, PCI_CLASS_STORAGE_SCSI), \
    153	ID_C(x, PCI_CLASS_STORAGE_RAID)
    154
    155#define IDIROC(x)  ((x) | ~ID_ALL_IROC_MASK)
    156
    157/* Generate IDs for all 16 possibilites.
    158 * The argument has already masked out
    159 * the 4 least significant bits of the device id.
    160 * (e.g., mask: ID_9005_GENERIC_MASK).
    161 */
    162#define ID16(x)                          \
    163	ID(x),                           \
    164	ID((x) | 0x0001000000000000ull), \
    165	ID((x) | 0x0002000000000000ull), \
    166	ID((x) | 0x0003000000000000ull), \
    167	ID((x) | 0x0004000000000000ull), \
    168	ID((x) | 0x0005000000000000ull), \
    169	ID((x) | 0x0006000000000000ull), \
    170	ID((x) | 0x0007000000000000ull), \
    171	ID((x) | 0x0008000000000000ull), \
    172	ID((x) | 0x0009000000000000ull), \
    173	ID((x) | 0x000A000000000000ull), \
    174	ID((x) | 0x000B000000000000ull), \
    175	ID((x) | 0x000C000000000000ull), \
    176	ID((x) | 0x000D000000000000ull), \
    177	ID((x) | 0x000E000000000000ull), \
    178	ID((x) | 0x000F000000000000ull)
    179
    180#endif /*_AICLIB_H */