usr/src/lib/libsmedia/library/inc/smedia.h
author Garrett D'Amore <gdamore@opensolaris.org>
Mon, 17 May 2010 21:17:01 -0700
changeset 12426 cdff5d2ea989
parent 11215 821b7edb881c
permissions -rw-r--r--
PSARC 2009/646 bd - generic block device driver PSARC 2009/648 sdcard conversion to bd, EOF blk2scsa 6952618 deliver blkdev (PSARC 2009/646)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     1
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     2
 * CDDL HEADER START
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     3
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     4
 * The contents of this file are subject to the terms of the
11215
821b7edb881c PSARC 2009/582 EOF of pcmem/pcram
Garrett D'Amore <gdamore@opensolaris.org>
parents: 0
diff changeset
     5
 * Common Development and Distribution License (the "License").
821b7edb881c PSARC 2009/582 EOF of pcmem/pcram
Garrett D'Amore <gdamore@opensolaris.org>
parents: 0
diff changeset
     6
 * You may not use this file except in compliance with the License.
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     7
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     8
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     9
 * or http://www.opensolaris.org/os/licensing.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    10
 * See the License for the specific language governing permissions
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    11
 * and limitations under the License.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    12
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    13
 * When distributing Covered Code, include this CDDL HEADER in each
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    14
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    15
 * If applicable, add the following below this CDDL HEADER, with the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    16
 * fields enclosed by brackets "[]" replaced with your own identifying
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    17
 * information: Portions Copyright [yyyy] [name of copyright owner]
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    18
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    19
 * CDDL HEADER END
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    20
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    21
/*
12426
cdff5d2ea989 PSARC 2009/646 bd - generic block device driver
Garrett D'Amore <gdamore@opensolaris.org>
parents: 11215
diff changeset
    22
 * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    23
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    24
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    25
#ifndef _SMEDIA_H_
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    26
#define	_SMEDIA_H_
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    27
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    28
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    29
 * smedia.h header for libsmedia library
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    30
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    31
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    32
#ifdef __cplusplus
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    33
extern "C" {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    34
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    35
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    36
#include <sys/types.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    37
#include <sys/stat.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    38
#include <sys/dkio.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    39
#include <sys/vtoc.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    40
#include <sys/scsi/scsi.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    41
#include <fcntl.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    42
#include <stdio.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    43
#include <errno.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    44
#include <synch.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    45
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    46
typedef struct smdevice_info {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    47
	uchar_t	sm_version;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    48
	int32_t	sm_interface_type;	/* Interface type */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    49
	char	*sm_vendor_name;	/* Vendor name */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    50
	char 	*sm_product_name;	/* Product name */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    51
	char 	*sm_firmware_version;	/* Firmware version */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    52
}smdevice_info_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    53
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    54
typedef	void	*smedia_handle_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    55
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    56
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    57
#define	SMDEVICE_INFO_V_1	1
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    58
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    59
/* Interface Types */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    60
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    61
#define	IF_SCSI		0x0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    62
#define	IF_FLOPPY	0x1
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    63
#define	IF_PCMCIA	0x2
12426
cdff5d2ea989 PSARC 2009/646 bd - generic block device driver
Garrett D'Amore <gdamore@opensolaris.org>
parents: 11215
diff changeset
    64
#define	IF_BLOCK	0x3
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    65
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    66
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    67
typedef struct smmedium_property {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    68
	int32_t sm_version;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    69
	int32_t sm_media_type;	/* Medium type */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    70
	int32_t sm_blocksize;	/* Medium block size in bytes */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    71
	int32_t sm_capacity;	/* Medium capacity in no. of blocks */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    72
	int32_t sm_pcyl;	/* No. of cylinders on the medium */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    73
	int32_t sm_nhead;	/* No. of heads */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    74
	int32_t sm_nsect;	/* No. of sectors per cylinder */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    75
}smmedium_prop_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    76
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    77
#define	SMMEDIA_PROP_V_1	1
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    78
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    79
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    80
 * Media types not defined for DKIOCGMEDIAINFO
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    81
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    82
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    83
#define	SM_REMOVABLE_DISK	0x20005 /* Removable disk */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    84
					/* FIXED_DISK + REMOVABLE */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    85
#define	SM_FLOPPY		0x10002 /* Floppy media */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    86
#define	SM_SCSI_FLOPPY		0x10005 /* SCSI floppy device */
11215
821b7edb881c PSARC 2009/582 EOF of pcmem/pcram
Garrett D'Amore <gdamore@opensolaris.org>
parents: 0
diff changeset
    87
#define	SM_PCMCIA_MEM		0x20006 /* PCMCIA memory card (Obsolete) */
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    88
#define	SM_PCMCIA_ATA		0x20007 /* PCMCIA ata card */
12426
cdff5d2ea989 PSARC 2009/646 bd - generic block device driver
Garrett D'Amore <gdamore@opensolaris.org>
parents: 11215
diff changeset
    89
#define	SM_BLOCK		0x20008	/* Generic block device */
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    90
#define	SM_NOT_PRESENT		0xFFFF
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    91
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    92
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    93
#define	MAX_PASSWD_LENGTH		32
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    94
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    95
#define	PASSWD		0x1000
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    96
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    97
#define	SM_WRITE_PROTECT_DISABLE	(PASSWD|0x0)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    98
#define	SM_WRITE_PROTECT_NOPASSWD	(PASSWD|0x2)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    99
#define	SM_WRITE_PROTECT_PASSWD		(PASSWD|0x4)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   100
#define	SM_READ_WRITE_PROTECT		(PASSWD|0x8)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   101
#define	SM_TEMP_UNLOCK_MODE		(PASSWD|0x10)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   102
#define	SM_STATUS_UNKNOWN		(PASSWD|0xFF)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   103
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   104
#define	SM_UNPROTECTED			SM_WRITE_PROTECT_DISABLE
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   105
#define	SM_WRITE_PROTECTED 		SM_WRITE_PROTECT_NOPASSWD
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   106
#define	SM_WRITE_PROTECTED_WP   	SM_WRITE_PROTECT_PASSWD
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   107
#define	SM_READ_WRITE_PROTECTED 	SM_READ_WRITE_PROTECT
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   108
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   109
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   110
typedef struct smwp_state {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   111
	uchar_t sm_version;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   112
	int32_t	sm_new_state;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   113
	int32_t	sm_passwd_len;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   114
	char	sm_passwd[MAX_PASSWD_LENGTH];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   115
}smwp_state_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   116
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   117
#define	SMWP_STATE_V_1			1
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   118
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   119
#define	FORMAT	0x2000
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   120
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   121
#define	SM_FORMAT_LONG		(FORMAT|0x0001)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   122
#define	SM_FORMAT_QUICK		(FORMAT|0x0002)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   123
#define	SM_FORMAT_FORCE		(FORMAT|0x0003)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   124
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   125
/* Floppy specific options */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   126
#define	SM_FORMAT_HD	(FORMAT|0x0011) /* Format high density (1.44MB) */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   127
#define	SM_FORMAT_DD	(FORMAT|0x0012) /* Format Double density (720KB) */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   128
#define	SM_FORMAT_ED	(FORMAT|0x0013) /* Format Extended density (2.88MB) */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   129
#define	SM_FORMAT_MD	(FORMAT|0x0014) /* Format Medium density (1.2MB) */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   130
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   131
#define	SM_FORMAT_IMMEDIATE	(FORMAT|0x0021)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   132
#define	SM_FORMAT_BLOCKED	(FORMAT|0x0022)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   133
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   134
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   135
/* New Library interface prototypes */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   136
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   137
int smedia_get_device_info(smedia_handle_t handle, smdevice_info_t *smdevinfop);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   138
int smedia_free_device_info(smedia_handle_t handle,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   139
		smdevice_info_t *smdevinfop);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   140
int smedia_get_medium_property(smedia_handle_t handle,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   141
		smmedium_prop_t *smpropp);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   142
int smedia_get_protection_status(smedia_handle_t handle,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   143
		smwp_state_t *wpstatep);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   144
int smedia_set_protection_status(smedia_handle_t handle,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   145
		smwp_state_t *wpstatep);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   146
size_t smedia_raw_read(smedia_handle_t handle, diskaddr_t blockno,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   147
		caddr_t buffer,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   148
							size_t nbytes);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   149
size_t smedia_raw_write(smedia_handle_t handle, diskaddr_t blockno,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   150
		caddr_t buffer,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   151
							size_t nbytes);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   152
int smedia_format(smedia_handle_t handle, uint_t flavor, uint_t mode);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   153
int smedia_check_format_status(smedia_handle_t handle);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   154
int smedia_format_track(smedia_handle_t handle, uint_t trackno, uint_t head,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   155
							uint_t density);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   156
int smedia_eject(smedia_handle_t handle);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   157
int smedia_reassign_block(smedia_handle_t handle, diskaddr_t blockno);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   158
smedia_handle_t smedia_get_handle(int32_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   159
int smedia_release_handle(smedia_handle_t handle);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   160
int smedia_uscsi_cmd(smedia_handle_t handle, struct uscsi_cmd *cmd);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   161
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   162
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   163
#ifdef __cplusplus
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   164
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   165
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   166
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   167
#endif /* _SMEDIA_H_ */