Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
hpimsginit.c
Go to the documentation of this file.
1 /******************************************************************************
2 
3  AudioScience HPI driver
4  Copyright (C) 1997-2011 AudioScience Inc. <[email protected]>
5 
6  This program is free software; you can redistribute it and/or modify
7  it under the terms of version 2 of the GNU General Public License as
8  published by the Free Software Foundation;
9 
10  This program is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  GNU General Public License for more details.
14 
15  You should have received a copy of the GNU General Public License
16  along with this program; if not, write to the Free Software
17  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 
19  Hardware Programming Interface (HPI) Utility functions.
20 
21  (C) Copyright AudioScience Inc. 2007
22 *******************************************************************************/
23 
24 #include "hpi_internal.h"
25 #include "hpimsginit.h"
26 
27 /* The actual message size for each object type */
29 /* The actual response size for each object type */
31 /* Flag to enable alternate message type for SSX2 bypass. */
32 static u16 gwSSX2_bypass;
33 
37 static void hpi_init_message(struct hpi_message *phm, u16 object,
38  u16 function)
39 {
40  memset(phm, 0, sizeof(*phm));
41  if ((object > 0) && (object <= HPI_OBJ_MAXINDEX))
42  phm->size = msg_size[object];
43  else
44  phm->size = sizeof(*phm);
45 
46  if (gwSSX2_bypass)
48  else
49  phm->type = HPI_TYPE_REQUEST;
50  phm->object = object;
51  phm->function = function;
52  phm->version = 0;
54  /* Expect actual adapter index to be set by caller */
55 }
56 
60 void hpi_init_response(struct hpi_response *phr, u16 object, u16 function,
61  u16 error)
62 {
63  memset(phr, 0, sizeof(*phr));
64  phr->type = HPI_TYPE_RESPONSE;
65  if ((object > 0) && (object <= HPI_OBJ_MAXINDEX))
66  phr->size = res_size[object];
67  else
68  phr->size = sizeof(*phr);
69  phr->object = object;
70  phr->function = function;
71  phr->error = error;
72  phr->specific_error = 0;
73  phr->version = 0;
74 }
75 
77  struct hpi_response *phr, u16 object, u16 function)
78 {
79  hpi_init_message(phm, object, function);
80  /* default error return if the response is
81  not filled in by the callee */
82  hpi_init_response(phr, object, function,
84 }
85 
86 static void hpi_init_messageV1(struct hpi_message_header *phm, u16 size,
87  u16 object, u16 function)
88 {
89  memset(phm, 0, sizeof(*phm));
90  if ((object > 0) && (object <= HPI_OBJ_MAXINDEX)) {
91  phm->size = size;
92  phm->type = HPI_TYPE_REQUEST;
93  phm->object = object;
94  phm->function = function;
95  phm->version = 1;
96  /* Expect adapter index to be set by caller */
97  }
98 }
99 
101  u16 object, u16 function)
102 {
103  memset(phr, 0, sizeof(*phr));
104  phr->size = size;
105  phr->version = 1;
106  phr->type = HPI_TYPE_RESPONSE;
108 }
109 
111  struct hpi_response_header *phr, u16 res_size, u16 object,
112  u16 function)
113 {
114  hpi_init_messageV1(phm, msg_size, object, function);
115  hpi_init_responseV1(phr, res_size, object, function);
116 }