1/*
2** Copyright 2002/03, Thomas Kurschel. All rights reserved.
3** Distributed under the terms of the OpenBeOS License.
4*/
5
6/*
7	Part of Open IDE bus manager
8
9	Interface between ide and scsi bus manager
10*/
11
12
13#ifndef __IDE_SIM_H__
14#define __IDE_SIM_H__
15
16
17#include <sys/cdefs.h>
18
19#include "scsi_cmds.h"
20
21
22extern scsi_for_sim_interface *scsi;
23extern scsi_sim_interface ide_sim_module;
24
25// set sense of current request
26static inline void
27set_sense(ide_device_info *device, int sense_key, int sense_asc)
28{
29	device->new_combined_sense = (sense_key << 16) | sense_asc;
30}
31
32// retrieve key from combined sense
33static inline uint8
34decode_sense_key(uint32 combined_sense)
35{
36	return (combined_sense >> 16) & 0xff;
37}
38
39// retrieve asc from combined sense
40static inline uint8
41decode_sense_asc(uint32 combined_sense)
42{
43	return (combined_sense >> 8) & 0xff;
44}
45
46// retrieve ascq from combined sense
47static inline uint8
48decode_sense_ascq(uint32 combined_sense)
49{
50	return combined_sense & 0xff;
51}
52
53// retrieve asc and ascq from combined sense
54static inline uint16
55decode_sense_asc_ascq(uint32 combined_sense)
56{
57	return combined_sense & 0xffff;
58}
59
60void finish_request(ide_qrequest *qrequest, bool resubmit);
61void finish_reset_queue(ide_qrequest *qrequest);
62void finish_retry(ide_qrequest *qrequest);
63void finish_all_requests(ide_device_info *device, ide_qrequest *ignore,
64		int subsys_status, bool resubmit);
65void finish_checksense(ide_qrequest *qrequest);
66
67
68// start request by resetting sense
69static inline void
70start_request(ide_device_info *device, ide_qrequest *qrequest)
71{
72	device->new_combined_sense = 0;
73	device->subsys_status = SCSI_REQ_CMP;
74	qrequest->request->device_status = SCSI_STATUS_GOOD;
75}
76
77
78__BEGIN_DECLS
79
80void create_sense(ide_device_info *device, scsi_sense *sense);
81
82__END_DECLS
83
84
85#endif
86