~ubuntu-branches/ubuntu/precise/alsa-driver/precise

« back to all changes in this revision

Viewing changes to pci/asihpi/hpidebug.c

  • Committer: Bazaar Package Importer
  • Author(s): Luke Yelavich
  • Date: 2011-02-21 18:06:40 UTC
  • mfrom: (1.1.15 upstream)
  • Revision ID: james.westby@ubuntu.com-20110221180640-a8p2yxtvgf7xbxub
Tags: 1.0.24+dfsg-0ubuntu1
* New upstream release
* Refreshed patches:
  - distinguish_kernel_makefile_and_source_dirs.patch
  - debian_dfsg_configure.patch
* debian/control: Update Vcs-bzr field to point to new branch location

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/************************************************************************
2
 
 
3
 
    AudioScience HPI driver
4
 
    Copyright (C) 1997-2003  AudioScience Inc. <support@audioscience.com>
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
 
Debug macro translation.
20
 
 
21
 
************************************************************************/
22
 
 
23
 
#include "hpi_internal.h"
24
 
#include "hpidebug.h"
25
 
 
26
 
/* Debug level; 0 quiet; 1 informative, 2 debug, 3 verbose debug.  */
27
 
int hpi_debug_level = HPI_DEBUG_LEVEL_DEFAULT;
28
 
 
29
 
void hpi_debug_init(void)
30
 
{
31
 
        printk(KERN_INFO "debug start\n");
32
 
}
33
 
 
34
 
int hpi_debug_level_set(int level)
35
 
{
36
 
        int old_level;
37
 
 
38
 
        old_level = hpi_debug_level;
39
 
        hpi_debug_level = level;
40
 
        return old_level;
41
 
}
42
 
 
43
 
int hpi_debug_level_get(void)
44
 
{
45
 
        return (hpi_debug_level);
46
 
}
47
 
 
48
 
#ifdef HPIOS_DEBUG_PRINT
49
 
/* implies OS has no printf-like function */
50
 
#include <stdarg.h>
51
 
 
52
 
void hpi_debug_printf(char *fmt, ...)
53
 
{
54
 
        va_list arglist;
55
 
        char buffer[128];
56
 
 
57
 
        va_start(arglist, fmt);
58
 
 
59
 
        if (buffer[0])
60
 
                HPIOS_DEBUG_PRINT(buffer);
61
 
        va_end(arglist);
62
 
}
63
 
#endif
64
 
 
65
 
struct treenode {
66
 
        void *array;
67
 
        unsigned int num_elements;
68
 
};
69
 
 
70
 
#define make_treenode_from_array(nodename, array) \
71
 
static void *tmp_strarray_##nodename[] = array; \
72
 
static struct treenode nodename = { \
73
 
        &tmp_strarray_##nodename, \
74
 
        ARRAY_SIZE(tmp_strarray_##nodename) \
75
 
};
76
 
 
77
 
#define get_treenode_elem(node_ptr, idx, type)  \
78
 
        (&(*((type *)(node_ptr)->array)[idx]))
79
 
 
80
 
make_treenode_from_array(hpi_control_type_strings, HPI_CONTROL_TYPE_STRINGS)
81
 
 
82
 
        make_treenode_from_array(hpi_subsys_strings, HPI_SUBSYS_STRINGS)
83
 
        make_treenode_from_array(hpi_adapter_strings, HPI_ADAPTER_STRINGS)
84
 
        make_treenode_from_array(hpi_istream_strings, HPI_ISTREAM_STRINGS)
85
 
        make_treenode_from_array(hpi_ostream_strings, HPI_OSTREAM_STRINGS)
86
 
        make_treenode_from_array(hpi_mixer_strings, HPI_MIXER_STRINGS)
87
 
        make_treenode_from_array(hpi_node_strings,
88
 
        {
89
 
        "NODE is invalid object"})
90
 
 
91
 
        make_treenode_from_array(hpi_control_strings, HPI_CONTROL_STRINGS)
92
 
        make_treenode_from_array(hpi_nvmemory_strings, HPI_OBJ_STRINGS)
93
 
        make_treenode_from_array(hpi_digitalio_strings, HPI_DIGITALIO_STRINGS)
94
 
        make_treenode_from_array(hpi_watchdog_strings, HPI_WATCHDOG_STRINGS)
95
 
        make_treenode_from_array(hpi_clock_strings, HPI_CLOCK_STRINGS)
96
 
        make_treenode_from_array(hpi_profile_strings, HPI_PROFILE_STRINGS)
97
 
        make_treenode_from_array(hpi_asyncevent_strings, HPI_ASYNCEVENT_STRINGS)
98
 
#define HPI_FUNCTION_STRINGS \
99
 
{ \
100
 
  &hpi_subsys_strings,\
101
 
  &hpi_adapter_strings,\
102
 
  &hpi_ostream_strings,\
103
 
  &hpi_istream_strings,\
104
 
  &hpi_mixer_strings,\
105
 
  &hpi_node_strings,\
106
 
  &hpi_control_strings,\
107
 
  &hpi_nvmemory_strings,\
108
 
  &hpi_digitalio_strings,\
109
 
  &hpi_watchdog_strings,\
110
 
  &hpi_clock_strings,\
111
 
  &hpi_profile_strings,\
112
 
  &hpi_control_strings, \
113
 
  &hpi_asyncevent_strings \
114
 
};
115
 
        make_treenode_from_array(hpi_function_strings, HPI_FUNCTION_STRINGS)
116
 
 
117
 
        compile_time_assert(HPI_OBJ_MAXINDEX == 14, obj_list_doesnt_match);
118
 
 
119
 
static char *hpi_function_string(unsigned int function)
120
 
{
121
 
        unsigned int object;
122
 
        struct treenode *tmp;
123
 
 
124
 
        object = function / HPI_OBJ_FUNCTION_SPACING;
125
 
        function = function - object * HPI_OBJ_FUNCTION_SPACING;
126
 
 
127
 
        if (object == 0 || object == HPI_OBJ_NODE
128
 
                || object > hpi_function_strings.num_elements)
129
 
                return "invalid object";
130
 
 
131
 
        tmp = get_treenode_elem(&hpi_function_strings, object - 1,
132
 
                struct treenode *);
133
 
 
134
 
        if (function == 0 || function > tmp->num_elements)
135
 
                return "invalid function";
136
 
 
137
 
        return get_treenode_elem(tmp, function - 1, char *);
138
 
}
139
 
 
140
 
void hpi_debug_message(struct hpi_message *phm, char *sz_fileline)
141
 
{
142
 
        if (phm) {
143
 
                if ((phm->object <= HPI_OBJ_MAXINDEX) && phm->object) {
144
 
                        u16 index = 0;
145
 
                        u16 attrib = 0;
146
 
                        int is_control = 0;
147
 
 
148
 
                        index = phm->obj_index;
149
 
                        switch (phm->object) {
150
 
                        case HPI_OBJ_ADAPTER:
151
 
                        case HPI_OBJ_PROFILE:
152
 
                                break;
153
 
                        case HPI_OBJ_MIXER:
154
 
                                if (phm->function ==
155
 
                                        HPI_MIXER_GET_CONTROL_BY_INDEX)
156
 
                                        index = phm->u.m.control_index;
157
 
                                break;
158
 
                        case HPI_OBJ_OSTREAM:
159
 
                        case HPI_OBJ_ISTREAM:
160
 
                                break;
161
 
 
162
 
                        case HPI_OBJ_CONTROLEX:
163
 
                        case HPI_OBJ_CONTROL:
164
 
                                if (phm->version == 1)
165
 
                                        attrib = HPI_CTL_ATTR(UNIVERSAL, 1);
166
 
                                else
167
 
                                        attrib = phm->u.c.attribute;
168
 
                                is_control = 1;
169
 
                                break;
170
 
                        default:
171
 
                                break;
172
 
                        }
173
 
 
174
 
                        if (is_control && (attrib & 0xFF00)) {
175
 
                                int control_type = (attrib & 0xFF00) >> 8;
176
 
                                int attr_index = HPI_CTL_ATTR_INDEX(attrib);
177
 
                                /* note the KERN facility level
178
 
                                   is in szFileline already */
179
 
                                printk("%s adapter %d %s ctrl_index x%04x %s %d\n", sz_fileline, phm->adapter_index, hpi_function_string(phm->function), index, get_treenode_elem(&hpi_control_type_strings, control_type, char *), attr_index);
180
 
 
181
 
                        } else
182
 
                                printk("%s adapter %d %s idx x%04x attr x%04x \n", sz_fileline, phm->adapter_index, hpi_function_string(phm->function), index, attrib);
183
 
                } else {
184
 
                        printk("adap=%d, invalid obj=%d, func=0x%x\n",
185
 
                                phm->adapter_index, phm->object,
186
 
                                phm->function);
187
 
                }
188
 
        } else
189
 
                printk("NULL message pointer to hpi_debug_message!\n");
190
 
}
191
 
 
192
 
void hpi_debug_data(u16 *pdata, u32 len)
193
 
{
194
 
        u32 i;
195
 
        int j;
196
 
        int k;
197
 
        int lines;
198
 
        int cols = 8;
199
 
 
200
 
        lines = (len + cols - 1) / cols;
201
 
        if (lines > 8)
202
 
                lines = 8;
203
 
 
204
 
        for (i = 0, j = 0; j < lines; j++) {
205
 
                printk(KERN_DEBUG "%p:", (pdata + i));
206
 
 
207
 
                for (k = 0; k < cols && i < len; i++, k++)
208
 
                        printk("%s%04x", k == 0 ? "" : " ", pdata[i]);
209
 
 
210
 
                printk("\n");
211
 
        }
212
 
}
 
1
#include "adriver.h"
 
2
#include "../../alsa-kernel/pci/asihpi/hpidebug.c"