GCOV Execution Analysis for safhpi.c

The left column is the number of times the code was executed during the unit test suites.

Exec CodeLine #
 
Source:safhpi.c
1
 
Graph:.libs/safhpi.gcno
2
 
Data:.libs/safhpi.gcda
3
 
Runs:378
4
 
Programs:378
5
 
/*      -*- linux-c -*-
6
 
 *
7
 
 * Copyright (c) 2003 by Intel Corp.
8
 
 * (C) Copyright IBM Corp. 2003-2004
9
 
 * Copyright (c) 2004 by FORCE Computers.
10
 
 *
11
 
 * This program is distributed in the hope that it will be useful,
12
 
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  This
14
 
 * file and program are licensed under a BSD style license.  See
15
 
 * the Copying file included with the OpenHPI distribution for
16
 
 * full licensing terms.
17
 
 *
18
 
 * Authors:
19
 
 *     Louis Zhuang < address removed >
20
 
 *     Sean Dague < address removed >
21
 
 *     Rusty Lynch
22
 
 *     David Judkovics < address removed >
23
 
 *     Thomas Kanngieser < address removed >
24
 
 *     Renier Morales < address removed >
25
 
 *     Racing Guo < address removed >
26
 
 */
27
 
28
 
#include <string.h>
29
 
#include <SaHpi.h>
30
 
#include <openhpi.h>
31
 
#include <sahpimacros.h>
32
 
33
 
/*********************************************************************
34
 
 *
35
 
 * Begin SAHPI B.1.1 Functions. For full documentation please see
36
 
 * the specification
37
 
 *
38
 
 ********************************************************************/
39
 
40
 
SaHpiVersionT SAHPI_API saHpiVersionGet ()
41
1 
{
42
1 
        return SAHPI_INTERFACE_VERSION;
43
 
}
44
 
45
 
SaErrorT SAHPI_API saHpiSessionOpen(
46
 
        SAHPI_IN  SaHpiDomainIdT  DomainId,
47
 
        SAHPI_OUT SaHpiSessionIdT *SessionId,
48
 
        SAHPI_IN  void            *SecurityParams)
49
376 
{
50
376 
        SaHpiSessionIdT sid;
51
376 
        SaHpiDomainIdT did;
52
 
        
53
376 
        if (SessionId == NULL) {
54
1 
                dbg("Invalid Session Id pointer");
55
1 
                return SA_ERR_HPI_INVALID_PARAMS;
56
 
        }
57
 
        
58
 
        /* Security Params required to be NULL by the spec at this point */
59
375 
        if (SecurityParams != NULL) {
60
1 
                dbg("SecurityParams must be NULL");
61
1 
                return SA_ERR_HPI_INVALID_PARAMS;
62
 
        }
63
 
64
374 
        if (oh_initialized() != SA_OK && oh_initialize() != SA_OK) {
65
0 
                dbg("ERROR. Could not initialize the library");
66
0 
                return SA_ERR_HPI_INTERNAL_ERROR;
67
 
        }
68
 
69
374 
        if (DomainId == SAHPI_UNSPECIFIED_DOMAIN_ID)
70
373 
                did = oh_get_default_domain_id();
71
 
        else
72
1 
                did = DomainId;
73
 
74
374 
        sid = oh_create_session(did);
75
374 
        if(!sid) {
76
1 
                dbg("Domain %d does not exist or unable to create session!", did);
77
1 
                return SA_ERR_HPI_INVALID_DOMAIN;
78
 
        }
79
 
80
373 
        *SessionId = sid;
81
 
82
373 
        return SA_OK;
83
 
}
84
 
85
 
SaErrorT SAHPI_API saHpiSessionClose(
86
 
        SAHPI_IN SaHpiSessionIdT SessionId)
87
364 
{
88
364 
        OH_CHECK_INIT_STATE(SessionId);
89
 
90
362 
        return oh_destroy_session(SessionId);
91
 
}
92
 
93
 
SaErrorT SAHPI_API saHpiDiscover(
94
 
        SAHPI_IN SaHpiSessionIdT SessionId)
95
371 
{
96
371 
        SaHpiDomainIdT did;
97
371 
        int rv = SA_ERR_HPI_ERROR;
98
371 
        unsigned int hid = 0, next_hid;
99
371 
        struct oh_handler *h = NULL;
100
 
101
371 
        OH_CHECK_INIT_STATE(SessionId);
102
369 
        OH_GET_DID(SessionId, did);
103
 
104
369 
        data_access_lock();
105
369 
        oh_lookup_next_handler(hid, &next_hid);
106
738 
        while (next_hid) {
107
369 
                hid = next_hid;
108
369 
                h = oh_lookup_handler(hid);
109
369 
                if (h->abi->discover_resources(h->hnd) == SA_OK && rv)
110
369 
                        rv = SA_OK;
111
 
112
369 
                oh_lookup_next_handler(hid, &next_hid);
113
 
        }
114
369 
        data_access_unlock();
115
 
116
369 
        if (rv) {
117
0 
                dbg("Error attempting to discover resources in Domain %d",did);
118
0 
                return SA_ERR_HPI_UNKNOWN;
119
 
        }
120
 
121
369 
        rv = oh_get_events();
122
 
123
369 
        if (rv < 0) {
124
0 
                dbg("Error attempting to process resources in Domain %d",did);
125
0 
                return SA_ERR_HPI_UNKNOWN;
126
 
        }
127
 
128
369 
        return SA_OK;
129
 
}
130
 
131
 
132
 
/*********************************************************************
133
 
 *
134
 
 *  Domain Functions
135
 
 *
136
 
 ********************************************************************/
137
 
138
 
SaErrorT SAHPI_API saHpiDomainInfoGet (
139
 
        SAHPI_IN  SaHpiSessionIdT  SessionId,
140
 
        SAHPI_OUT SaHpiDomainInfoT *DomainInfo)
141
151 
{
142
151 
        SaHpiDomainIdT did;
143
151 
        struct oh_domain *d = NULL;
144
 
145
151 
        if (!DomainInfo) return SA_ERR_HPI_INVALID_PARAMS;
146
 
147
150 
        OH_CHECK_INIT_STATE(SessionId);
148
149 
        OH_GET_DID(SessionId, did);
149
 
150
149 
        OH_GET_DOMAIN(did, d); /* Lock domain */
151
149 
        DomainInfo->DomainId = d->id;
152
149 
        DomainInfo->DomainCapabilities = d->capabilities;
153
149 
        DomainInfo->IsPeer = d->is_peer;
154
149 
        DomainInfo->RptUpdateCount = d->rpt.update_count;
155
149 
        DomainInfo->RptUpdateTimestamp = d->rpt.update_timestamp;
156
149 
        memcpy(DomainInfo->Guid, d->guid, sizeof(SaHpiGuidT));
157
149 
        DomainInfo->DomainTag = d->tag;
158
149 
        oh_release_domain(d); /* Unlock domain */
159
 
160
149 
        return SA_OK;
161
 
}
162
 
163
 
/***********************************************************
164
 
 *
165
 
 *  For OpenHPI 2.0 this is always going to return
166
 
 *  NOT_PRESENT unless it is called invalidly.  True
167
 
 *  DRT support won't be there until 2.2.
168
 
 *
169
 
 **********************************************************/
170
 
171
 
SaErrorT SAHPI_API saHpiDrtEntryGet (
172
 
        SAHPI_IN  SaHpiSessionIdT     SessionId,
173
 
        SAHPI_IN  SaHpiEntryIdT       EntryId,
174
 
        SAHPI_OUT SaHpiEntryIdT       *NextEntryId,
175
 
        SAHPI_OUT SaHpiDrtEntryT      *DrtEntry)
176
148 
{
177
148 
        SaHpiDomainIdT did;
178
148 
        OH_CHECK_INIT_STATE(SessionId);
179
147 
        OH_GET_DID(SessionId, did);
180
 
        
181
147 
        if((DrtEntry == NULL) || 
182
 
           (NextEntryId == NULL) || 
183
 
           (EntryId == SAHPI_LAST_ENTRY)) {
184
3 
                return SA_ERR_HPI_INVALID_PARAMS;
185
 
        }
186
 
187
144 
        return SA_ERR_HPI_NOT_PRESENT;
188
 
}
189
 
190
 
SaErrorT SAHPI_API saHpiDomainTagSet (
191
 
        SAHPI_IN  SaHpiSessionIdT      SessionId,
192
 
        SAHPI_IN  SaHpiTextBufferT     *DomainTag)
193
11 
{
194
11 
        SaHpiDomainIdT did;
195
11 
        struct oh_domain *d = NULL;
196
 
197
11 
        if (!DomainTag || !oh_valid_textbuffer(DomainTag))
198
4 
                return SA_ERR_HPI_INVALID_PARAMS;
199
 
200
7 
        OH_CHECK_INIT_STATE(SessionId);
201
6 
        OH_GET_DID(SessionId, did);
202
 
203
6 
        OH_GET_DOMAIN(did, d); /* Lock domain */
204
6 
        d->tag = *DomainTag;
205
6 
        oh_release_domain(d); /* Unlock domain */
206
 
207
6 
        return SA_OK;
208
 
}
209
 
210
 
/*********************************************************************
211
 
 *
212
 
 *  Resource Functions
213
 
 *
214
 
 ********************************************************************/
215
 
216
 
SaErrorT SAHPI_API saHpiRptEntryGet(
217
 
        SAHPI_IN  SaHpiSessionIdT SessionId,
218
 
        SAHPI_IN  SaHpiEntryIdT   EntryId,
219
 
        SAHPI_OUT SaHpiEntryIdT   *NextEntryId,
220
 
        SAHPI_OUT SaHpiRptEntryT  *RptEntry)
221
701 
{
222
701 
        SaHpiDomainIdT did;
223
701 
        struct oh_domain *d = NULL;
224
701 
        SaHpiRptEntryT *req_entry;
225
701 
        SaHpiRptEntryT *next_entry;
226
 
227
701 
        OH_CHECK_INIT_STATE(SessionId);
228
700 
        OH_GET_DID(SessionId, did);
229
 
230
 
        /* Test pointer parameters for invalid pointers */
231
700 
        if ((NextEntryId == NULL) || (RptEntry == NULL)) {
232
2 
                return SA_ERR_HPI_INVALID_PARAMS;
233
 
        }
234
 
235
 
        /* I believe this is the only current reserved value
236
 
           here, though others may come in the future. */
237
698 
        if (EntryId == SAHPI_LAST_ENTRY) {
238
1 
                return SA_ERR_HPI_INVALID_PARAMS;
239
 
        }
240
 
241
697 
        OH_GET_DOMAIN(did, d); /* Lock domain */
242
 
243
697 
        if (EntryId == SAHPI_FIRST_ENTRY) {
244
288 
                req_entry = oh_get_resource_next(&(d->rpt), SAHPI_FIRST_ENTRY);
245
 
        } else {
246
409 
                req_entry = oh_get_resource_by_id(&(d->rpt), EntryId);
247
 
        }
248
 
249
 
        /* if the entry was NULL, clearly have an issue */
250
697 
        if (req_entry == NULL) {
251
1 
                dbg("Invalid EntryId %d in Domain %d", EntryId, did);
252
1 
                oh_release_domain(d); /* Unlock domain */
253
1 
                return SA_ERR_HPI_NOT_PRESENT;
254
 
        }
255
 
256
696 
        memcpy(RptEntry, req_entry, sizeof(*RptEntry));
257
 
258
696 
        next_entry = oh_get_resource_next(&(d->rpt), req_entry->EntryId);
259
 
260
696 
        if(next_entry != NULL) {
261
517 
                *NextEntryId = next_entry->EntryId;
262
 
        } else {
263
179 
                *NextEntryId = SAHPI_LAST_ENTRY;
264
 
        }
265
 
266
696 
        oh_release_domain(d); /* Unlock domain */
267
 
268
696 
        return SA_OK;
269
 
}
270
 
271
 
SaErrorT SAHPI_API saHpiRptEntryGetByResourceId(
272
 
        SAHPI_IN  SaHpiSessionIdT  SessionId,
273
 
        SAHPI_IN  SaHpiResourceIdT ResourceId,
274
 
        SAHPI_OUT SaHpiRptEntryT   *RptEntry)
275
7 
{
276
7 
        SaHpiDomainIdT did;
277
7 
        struct oh_domain *d = NULL;
278
7 
        SaHpiRptEntryT *req_entry;
279
 
280
7 
        OH_CHECK_INIT_STATE(SessionId);
281
6 
        OH_GET_DID(SessionId, did);
282
 
283
 
        /* Test pointer parameters for invalid pointers */
284
6 
        if (ResourceId == SAHPI_UNSPECIFIED_RESOURCE_ID ||
285
 
            RptEntry == NULL)
286
 
        {
287
1 
                return SA_ERR_HPI_INVALID_PARAMS;
288
 
        }
289
 
290
5 
        OH_GET_DOMAIN(did, d); /* Lock domain */
291
 
292
5 
        req_entry = oh_get_resource_by_id(&(d->rpt), ResourceId);
293
 
294
 
        /*
295
 
         * is this case really supposed to be an error?  I thought
296
 
         * there was a valid return for "not found in domain"
297
 
         */
298
 
299
5 
        if (req_entry == NULL) {
300
1 
                dbg("No such Resource Id %d in Domain %d", ResourceId, did);
301
1 
                oh_release_domain(d); /* Unlock domain */
302
1 
                return SA_ERR_HPI_INVALID_CMD;
303
 
        }
304
 
305
4 
        memcpy(RptEntry, req_entry, sizeof(*RptEntry));
306
 
307
4 
        oh_release_domain(d); /* Unlock domain */
308
 
309
4 
        return SA_OK;
310
 
}
311
 
312
 
SaErrorT SAHPI_API saHpiResourceSeveritySet(
313
 
        SAHPI_IN SaHpiSessionIdT  SessionId,
314
 
        SAHPI_IN SaHpiResourceIdT ResourceId,
315
 
        SAHPI_IN SaHpiSeverityT   Severity)
316
5 
{
317
 
        /* this requires a new abi call to push down to the plugin */
318
 
        int (*set_res_sev)(void *hnd, SaHpiResourceIdT id,
319
5 
                             SaHpiSeverityT sev);
320
 
321
5 
        SaHpiDomainIdT did;
322
5 
        struct oh_handler *h = NULL;
323
5 
        struct oh_domain *d = NULL;
324
 
325
5 
        OH_CHECK_INIT_STATE(SessionId);
326
 
327
4 
        if (ResourceId == SAHPI_UNSPECIFIED_RESOURCE_ID) {
328
0 
                dbg("Invalid resource id, SAHPI_UNSPECIFIED_RESOURCE_ID passed.");
329
0 
                return SA_ERR_HPI_INVALID_PARAMS;
330
4 
        } else if (!oh_lookup_severity(Severity)) {
331
1 
                dbg("Invalid severity %d passed.", Severity);
332
1 
                return SA_ERR_HPI_INVALID_PARAMS;
333
 
        }
334
 
335
3 
        OH_GET_DID(SessionId, did);
336
 
337
3 
        OH_GET_DOMAIN(did, d); /* Lock domain */
338
 
339
3 
        OH_HANDLER_GET(d, ResourceId, h);
340
2 
        oh_release_domain(d); /* Unlock domain */
341
 
342
2 
        set_res_sev = h->abi->set_resource_severity;
343
 
344
2 
        if (!set_res_sev) {
345
2 
                return SA_ERR_HPI_INVALID_CMD;
346
 
        }
347
 
348
0 
        if (set_res_sev(h->hnd, ResourceId, Severity) < 0) {
349
0 
                dbg("Setting severity failed for ResourceId %d in Domain %d",
350
 
                    ResourceId, did);
351
0 
                return SA_ERR_HPI_UNKNOWN;
352
 
        }
353
 
354
 
        /* to get rpt entry into infrastructure */
355
0 
        oh_get_events();
356
 
357
0 
        return SA_OK;
358
 
}
359
 
360
 
SaErrorT SAHPI_API saHpiResourceTagSet(
361
 
        SAHPI_IN SaHpiSessionIdT  SessionId,
362
 
        SAHPI_IN SaHpiResourceIdT ResourceId,
363
 
        SAHPI_IN SaHpiTextBufferT *ResourceTag)
364
11 
{
365
11 
        SaErrorT rv;
366
 
        SaErrorT (*set_res_tag)(void *hnd, SaHpiResourceIdT id,
367
11 
                                SaHpiTextBufferT *ResourceTag);
368
 
369
11 
        SaHpiDomainIdT did;
370
11 
        struct oh_handler *h = NULL;
371
11 
        struct oh_domain *d = NULL;
372
11 
        SaHpiRptEntryT *rptentry;
373
 
374
11 
        OH_CHECK_INIT_STATE(SessionId);
375
10 
        OH_GET_DID(SessionId, did);
376
 
377
10 
        OH_GET_DOMAIN(did, d); /* Lock domain */
378
10 
        OH_HANDLER_GET(d, ResourceId, h);
379
9 
        oh_release_domain(d); /* Unlock domain */
380
 
381
9 
        set_res_tag = h->abi->set_resource_tag;
382
 
383
9 
        if (!set_res_tag) {
384
9 
                return SA_ERR_HPI_INVALID_CMD;
385
 
        }
386
 
387
0 
        rv = set_res_tag(h->hnd, ResourceId, ResourceTag);
388
0 
        if (rv != SA_OK) {
389
0 
                dbg("Tag set failed for Resource %d in Domain %d",
390
 
                    ResourceId, did);
391
0 
                return rv;
392
 
        }
393
 
394
0 
        OH_GET_DOMAIN(did, d); /* Lock domain */
395
0 
        rptentry = oh_get_resource_by_id(&(d->rpt), ResourceId);
396
0 
        if (!rptentry) {
397
0 
                dbg("Tag set failed: No Resource %d in Domain %d",
398
 
                    ResourceId, did);
399
0 
                oh_release_domain(d); /* Unlock domain */
400
0 
                return SA_ERR_HPI_NOT_PRESENT;
401
 
        }
402
0 
        rptentry->ResourceTag = *ResourceTag;
403
0 
        oh_release_domain(d); /* Unlock domain */
404
 
405
0 
        return SA_OK;
406
 
}
407
 
408
 
SaErrorT SAHPI_API saHpiResourceIdGet(
409
 
        SAHPI_IN  SaHpiSessionIdT  SessionId,
410
 
        SAHPI_OUT SaHpiResourceIdT *ResourceId)
411
3 
{
412
3 
        SaHpiDomainIdT did;
413
3 
        struct oh_domain *d = NULL;
414
3 
        SaHpiRptEntryT *rptentry;
415
3 
        struct oh_global_param ep_param = { .type = OPENHPI_ON_EP };
416
 
417
3 
        OH_CHECK_INIT_STATE(SessionId);
418
2 
        OH_GET_DID(SessionId, did);
419
 
420
2 
        oh_get_global_param(&ep_param);
421
 
                
422
2 
        OH_GET_DOMAIN(did, d); /* Lock domain */
423
2 
        rptentry = oh_get_resource_by_ep(&(d->rpt), &ep_param.u.on_ep);
424
2 
        if (!rptentry) {
425
2 
                oh_release_domain(d); /* Unlock domain */
426
2 
                return SA_ERR_HPI_NOT_PRESENT;
427
 
        }
428
 
429
0 
        *ResourceId = rptentry->ResourceId;
430
0 
        oh_release_domain(d); /* Unlock domain */
431
 
432
0 
        return SA_OK;
433
 
}
434
 
435
 
/*********************************************************************
436
 
 *
437
 
 *  Event Log Functions
438
 
 *
439
 
 ********************************************************************/
440
 
441
 
SaErrorT SAHPI_API saHpiEventLogInfoGet (
442
 
        SAHPI_IN  SaHpiSessionIdT    SessionId,
443
 
        SAHPI_IN  SaHpiResourceIdT   ResourceId,
444
 
        SAHPI_OUT SaHpiEventLogInfoT *Info)
445
22 
{
446
22 
        SaErrorT rv;
447
22 
        SaErrorT (*get_func) (void *, SaHpiResourceIdT, SaHpiEventLogInfoT *);
448
22 
        SaHpiRptEntryT *res;
449
22 
        struct oh_handler *h = NULL;
450
22 
        struct oh_domain *d = NULL;
451
22 
        SaHpiDomainIdT did;
452
 
453
 
        /* Test pointer parameters for invalid pointers */
454
22 
        if (Info == NULL)
455
 
        {
456
1 
                return SA_ERR_HPI_INVALID_PARAMS;
457
 
        }
458
 
459
21 
        OH_CHECK_INIT_STATE(SessionId);
460
18 
        OH_GET_DID(SessionId, did);
461
18 
        OH_GET_DOMAIN(did, d); /* Lock domain */
462
 
463
 
        /* test for special domain case */
464
18 
        if (ResourceId == SAHPI_UNSPECIFIED_RESOURCE_ID) {
465
10 
                rv = oh_el_info(d->del, Info);
466
10 
                oh_release_domain(d); /* Unlock domain */
467
10 
                return rv;
468
 
        }
469
 
470
8 
        OH_RESOURCE_GET(d, ResourceId, res);
471
 
472
5 
        if(!(res->ResourceCapabilities & SAHPI_CAPABILITY_EVENT_LOG)) {
473
3 
                dbg("Resource %d in Domain %d does not have EL",ResourceId,did);
474
3 
                oh_release_domain(d); /* Unlock domain */
475
3 
                return SA_ERR_HPI_CAPABILITY;
476
 
        }
477
 
478
2 
        OH_HANDLER_GET(d, ResourceId, h);
479
2 
        oh_release_domain(d); /* Unlock domain */
480
 
481
2 
        get_func = h->abi->get_el_info;
482
 
483
2 
        if (!get_func) {
484
0 
                return SA_ERR_HPI_INVALID_CMD;
485
 
        }
486
 
487
2 
        rv = get_func(h->hnd, ResourceId, Info);
488
 
489
2 
        if (rv != SA_OK) {
490
0 
                dbg("EL info get failed");
491
 
        }
492
 
493
2 
        return rv;
494
 
}
495
 
496
 
SaErrorT SAHPI_API saHpiEventLogEntryGet (
497
 
        SAHPI_IN    SaHpiSessionIdT       SessionId,
498
 
        SAHPI_IN    SaHpiResourceIdT      ResourceId,
499
 
        SAHPI_IN    SaHpiEventLogEntryIdT EntryId,
500
 
        SAHPI_OUT   SaHpiEventLogEntryIdT *PrevEntryId,
501
 
        SAHPI_OUT   SaHpiEventLogEntryIdT *NextEntryId,
502
 
        SAHPI_OUT   SaHpiEventLogEntryT   *EventLogEntry,
503
 
        SAHPI_INOUT SaHpiRdrT             *Rdr,
504
 
        SAHPI_INOUT SaHpiRptEntryT        *RptEntry)
505
32 
{
506
32 
        SaErrorT rv;
507
 
        SaErrorT (*get_el_entry)(void *hnd, SaHpiResourceIdT id,
508
 
				SaHpiEventLogEntryIdT current,
509
 
				SaHpiEventLogEntryIdT *prev,
510
 
				SaHpiEventLogEntryIdT *next,
511
 
				SaHpiEventLogEntryT *entry,
512
 
				SaHpiRdrT  *rdr,
513
32 
				SaHpiRptEntryT  *rptentry);
514
 
				
515
32 
        SaHpiRptEntryT *res;
516
32 
        struct oh_handler *h;
517
32 
        struct oh_domain *d;
518
32 
        oh_el_entry *elentry;
519
32 
        SaErrorT retc;
520
32 
        SaHpiDomainIdT did;
521
 
522
 
        /* Test pointer parameters for invalid pointers */
523
32 
        if (!PrevEntryId || !EventLogEntry || !NextEntryId ||
524
 
            EntryId == SAHPI_NO_MORE_ENTRIES)
525
 
        {
526
4 
                return SA_ERR_HPI_INVALID_PARAMS;
527
 
        }
528
 
529
28 
        OH_CHECK_INIT_STATE(SessionId);
530
27 
        OH_GET_DID(SessionId, did);
531
27 
        OH_GET_DOMAIN(did, d); /* Lock domain */
532
 
533
 
        /* test for special domain case */
534
27 
        if (ResourceId == SAHPI_UNSPECIFIED_RESOURCE_ID) {
535
24 
                retc = oh_el_get(d->del, EntryId, PrevEntryId, NextEntryId,
536
 
                                 &elentry);
537
24 
                if (retc == SA_OK) {
538
24 
                        memcpy(EventLogEntry, &elentry->event, sizeof(SaHpiEventLogEntryT));
539
24 
			if (Rdr)
540
24 
				memcpy(Rdr, &elentry->rdr, sizeof(SaHpiRdrT)); 	
541
24 
			if (RptEntry)
542
24 
				memcpy(RptEntry, &elentry->res, sizeof(SaHpiRptEntryT));
543
 
		}
544
24 
                oh_release_domain(d); /* Unlock domain */
545
24 
                return retc;
546
 
        }
547
 
548
3 
        OH_RESOURCE_GET(d, ResourceId, res);
549
 
550
2 
        if(!(res->ResourceCapabilities & SAHPI_CAPABILITY_EVENT_LOG)) {
551
1 
                dbg("Resource %d in Domain %d does not have EL",ResourceId,did);
552
1 
                oh_release_domain(d); /* Unlock domain */
553
1 
                return SA_ERR_HPI_CAPABILITY;
554
 
        }
555
 
556
1 
        OH_HANDLER_GET(d, ResourceId, h);
557
1 
	oh_release_domain(d); /* Unlock domain */
558
 
	
559
1 
        get_el_entry = h->abi->get_el_entry;
560
 
561
1 
        if (!get_el_entry) {
562
0 
                dbg("This api is not supported");
563
0 
                return SA_ERR_HPI_INVALID_CMD;
564
 
        }
565
 
566
1 
        rv = get_el_entry(h->hnd, ResourceId,
567
 
				EntryId, PrevEntryId,
568
 
				NextEntryId, EventLogEntry,
569
 
				Rdr, RptEntry);
570
 
571
1 
        if(rv != SA_OK)
572
1 
                dbg("EL entry get failed\n");
573
 
574
1 
        return rv;
575
 
}
576
 
577
 
SaErrorT SAHPI_API saHpiEventLogEntryAdd (
578
 
        SAHPI_IN SaHpiSessionIdT  SessionId,
579
 
        SAHPI_IN SaHpiResourceIdT ResourceId,
580
 
        SAHPI_IN SaHpiEventT      *EvtEntry)
581
10 
{
582
10 
        SaErrorT rv;
583
 
        SaErrorT (*add_el_entry)(void *hnd, SaHpiResourceIdT id,
584
10 
                                  const SaHpiEventT *Event);
585
10 
        SaHpiRptEntryT *res;
586
10 
        struct oh_handler *h;
587
10 
        struct oh_domain *d;
588
10 
        SaHpiDomainIdT did;
589
 
590
10 
        OH_CHECK_INIT_STATE(SessionId);
591
 
        
592
9 
        if (EvtEntry == NULL ||
593
 
            EvtEntry->EventType != SAHPI_ET_USER ||
594
 
            EvtEntry->Source != SAHPI_UNSPECIFIED_RESOURCE_ID ||
595
 
            !oh_lookup_severity(EvtEntry->Severity) ||
596
 
            !oh_valid_textbuffer(&(EvtEntry->EventDataUnion.UserEvent.UserEventData))) {
597
8 
                return SA_ERR_HPI_INVALID_PARAMS;
598
 
        }
599
 
        
600
1 
        OH_GET_DID(SessionId, did);
601
1 
        OH_GET_DOMAIN(did, d); /* Lock domain */
602
 
603
 
        /* test for special domain case */
604
1 
        if (ResourceId == SAHPI_UNSPECIFIED_RESOURCE_ID) {
605
1 
                rv = oh_el_append(d->del, EvtEntry, NULL, NULL);
606
1 
                oh_release_domain(d); /* Unlock domain */
607
1 
                return rv;
608
 
        }
609
 
610
0 
        OH_RESOURCE_GET(d, ResourceId, res);
611
 
612
0 
        if(!(res->ResourceCapabilities & SAHPI_CAPABILITY_EVENT_LOG)) {
613
0 
                dbg("Resource %d in Domain %d does not have EL.",ResourceId,did);
614
0 
                oh_release_domain(d); /* Unlock domain */
615
0 
                return SA_ERR_HPI_CAPABILITY;
616
 
        }
617
 
618
0 
        OH_HANDLER_GET(d, ResourceId, h);
619
0 
        oh_release_domain(d); /* Unlock domain */
620
 
621
0 
        add_el_entry = h->abi->add_el_entry;
622
 
623
0 
        if (!add_el_entry) {
624
0 
                return SA_ERR_HPI_INVALID_CMD;
625
 
        }
626
 
627
0 
        rv = add_el_entry(h->hnd, ResourceId, EvtEntry);
628
0 
        if(rv != SA_OK) {
629
0 
                dbg("EL add entry failed");
630
 
        }
631
 
632
 
633
 
        /* to get REL entry into infrastructure */
634
0 
        rv = oh_get_events();
635
0 
        if(rv != SA_OK) {
636
0 
                dbg("Event loop failed");
637
 
        }
638
 
639
0 
        return rv;
640
 
}
641
 
642
 
SaErrorT SAHPI_API saHpiEventLogClear (
643
 
        SAHPI_IN SaHpiSessionIdT  SessionId,
644
 
        SAHPI_IN SaHpiResourceIdT ResourceId)
645
4 
{
646
4 
        SaErrorT rv;
647
4 
        SaErrorT (*clear_el)(void *hnd, SaHpiResourceIdT id);
648
4 
        SaHpiRptEntryT *res;
649
4 
        struct oh_handler *h;
650
4 
        struct oh_domain *d;
651
4 
        SaHpiDomainIdT did;
652
 
653
 
654
4 
        OH_CHECK_INIT_STATE(SessionId);
655
3 
        OH_GET_DID(SessionId, did);
656
3 
        OH_GET_DOMAIN(did, d); /* Lock domain */
657
 
658
 
        /* test for special domain case */
659
3 
        if (ResourceId == SAHPI_UNSPECIFIED_RESOURCE_ID) {
660
1 
                rv = oh_el_clear(d->del);
661
1 
                oh_release_domain(d); /* Unlock domain */
662
1 
                return rv;
663
 
        }
664
 
665
2 
        OH_RESOURCE_GET(d, ResourceId, res);
666
 
667
1 
        if(!(res->ResourceCapabilities & SAHPI_CAPABILITY_EVENT_LOG)) {
668
1 
                dbg("Resource %d in Domain %d does not have EL",ResourceId,did);
669
1 
                oh_release_domain(d); /* Unlock domain */
670
1 
                return SA_ERR_HPI_CAPABILITY;
671
 
        }
672
 
673
0 
        OH_HANDLER_GET(d, ResourceId, h);
674
0 
        oh_release_domain(d); /* Unlock domain */
675
 
676
0 
        clear_el = h->abi->clear_el;
677
0 
        if (!clear_el) {
678
0 
                return SA_ERR_HPI_INVALID_CMD;
679
 
        }
680
 
681
0 
        rv = clear_el(h->hnd, ResourceId);
682
0 
        if(rv != SA_OK) {
683
0 
                dbg("EL delete entry failed");
684
 
        }
685
 
686
0 
        return rv;
687
 
}
688
 
689
 
SaErrorT SAHPI_API saHpiEventLogTimeGet (
690
 
        SAHPI_IN  SaHpiSessionIdT  SessionId,
691
 
        SAHPI_IN  SaHpiResourceIdT ResourceId,
692
 
        SAHPI_OUT SaHpiTimeT       *Time)
693
8 
{
694
8 
        SaHpiEventLogInfoT info;
695
8 
        SaErrorT rv;
696
 
697
 
        /* Test pointer parameters for invalid pointers */
698
8 
        if (Time == NULL)
699
 
        {
700
1 
                return SA_ERR_HPI_INVALID_PARAMS;
701
 
        }
702
 
703
7 
        rv = saHpiEventLogInfoGet(SessionId, ResourceId, &info);
704
 
705
7 
        if(rv != SA_OK) {
706
3 
                return rv;
707
 
        }
708
 
709
4 
        *Time = info.CurrentTime;
710
 
711
4 
        return SA_OK;
712
 
}
713
 
714
 
SaErrorT SAHPI_API saHpiEventLogTimeSet (
715
 
        SAHPI_IN SaHpiSessionIdT  SessionId,
716
 
        SAHPI_IN SaHpiResourceIdT ResourceId,
717
 
        SAHPI_IN SaHpiTimeT       Time)
718
10 
{
719
10 
        SaErrorT rv;
720
10 
        SaErrorT (*set_el_time)(void *hnd, SaHpiResourceIdT id, SaHpiTimeT time);
721
10 
        SaHpiRptEntryT *res;
722
10 
        struct oh_handler *h;
723
10 
        struct oh_domain *d;
724
10 
        SaHpiDomainIdT did;
725
 
726
10 
        OH_CHECK_INIT_STATE(SessionId);
727
9 
        OH_GET_DID(SessionId, did);
728
9 
        OH_GET_DOMAIN(did, d); /* Lock domain */
729
 
730
 
        /* test for special domain case */
731
9 
        if (ResourceId == SAHPI_UNSPECIFIED_RESOURCE_ID) {
732
6 
                rv = oh_el_timeset(d->del, Time);
733
6 
                oh_release_domain(d); /* Unlock domain */
734
6 
                return rv;
735
 
        }
736
 
737
3 
        OH_RESOURCE_GET(d, ResourceId, res);
738
 
739
2 
        if(!(res->ResourceCapabilities & SAHPI_CAPABILITY_EVENT_LOG)) {
740
2 
                dbg("Resource %d in Domain %d does not have EL",ResourceId,did);
741
2 
                oh_release_domain(d); /* Unlock domain */
742
2 
                return SA_ERR_HPI_CAPABILITY;
743
 
        }
744
 
745
0 
        OH_HANDLER_GET(d, ResourceId, h);
746
0 
        oh_release_domain(d); /* Unlock domain */
747
 
748
0 
        set_el_time = h->abi->set_el_time;
749
 
750
0 
        if (!set_el_time) {
751
0 
                return SA_ERR_HPI_INVALID_CMD;
752
 
        }
753
 
754
0 
        rv = set_el_time(h->hnd, ResourceId, Time);
755
0 
        if(rv != SA_OK) {
756
0 
                dbg("Set EL time failed");
757
 
        }
758
 
759
0 
        return rv;
760
 
}
761
 
762
 
SaErrorT SAHPI_API saHpiEventLogStateGet (
763
 
        SAHPI_IN  SaHpiSessionIdT  SessionId,
764
 
        SAHPI_IN  SaHpiResourceIdT ResourceId,
765
 
        SAHPI_OUT SaHpiBoolT       *Enable)
766
9 
{
767
9 
        SaHpiEventLogInfoT info;
768
9 
        SaErrorT rv;
769
 
770
 
        /* Test pointer parameters for invalid pointers */
771
9 
        if (Enable == NULL)
772
 
        {
773
1 
                return SA_ERR_HPI_INVALID_PARAMS;
774
 
        }
775
 
776
8 
        rv = saHpiEventLogInfoGet(SessionId, ResourceId, &info);
777
 
778
8 
        if(rv != SA_OK) {
779
3 
                return rv;
780
 
        }
781
 
782
5 
        *Enable = info.Enabled;
783
 
784
5 
        return SA_OK;
785
 
}
786
 
787
 
SaErrorT SAHPI_API saHpiEventLogStateSet (
788
 
        SAHPI_IN SaHpiSessionIdT  SessionId,
789
 
        SAHPI_IN SaHpiResourceIdT ResourceId,
790
 
        SAHPI_IN SaHpiBoolT       Enable)
791
9 
{
792
9 
        struct oh_domain *d;
793
9 
        SaHpiDomainIdT did;
794
9 
        SaHpiRptEntryT *res;
795
 
796
9 
        OH_CHECK_INIT_STATE(SessionId);
797
8 
        OH_GET_DID(SessionId, did);
798
8 
        OH_GET_DOMAIN(did, d); /* Lock domain */
799
 
800
 
        /* test for special domain case */
801
8 
        if (ResourceId == SAHPI_UNSPECIFIED_RESOURCE_ID) {                
802
6 
                d->del->enabled = Enable;
803
6 
                oh_release_domain(d); /* Unlock domain */
804
6 
                return SA_OK;
805
 
        }
806
 
        
807
2 
        OH_RESOURCE_GET(d, ResourceId, res);
808
 
809
1 
        if(!(res->ResourceCapabilities & SAHPI_CAPABILITY_EVENT_LOG)) {
810
1 
                dbg("Resource %d in Domain %d does not have EL",ResourceId,did);
811
1 
                oh_release_domain(d); /* Unlock domain */
812
1 
                return SA_ERR_HPI_CAPABILITY;
813
 
        } else {
814
0 
                oh_release_domain(d); /* Unlock domain */
815
 
                /* FIXME: Need to add set_el_state abi call */
816
0 
                return SA_ERR_HPI_UNSUPPORTED_API;
817
 
        }
818
 
}
819
 
820
 
SaErrorT SAHPI_API saHpiEventLogOverflowReset (
821
 
        SAHPI_IN SaHpiSessionIdT  SessionId,
822
 
        SAHPI_IN SaHpiResourceIdT ResourceId)
823
2 
{
824
2 
        return SA_ERR_HPI_UNSUPPORTED_API;
825
 
}
826
 
827
 
/*********************************************************************
828
 
 *
829
 
 *  Event Functions
830
 
 *
831
 
 ********************************************************************/
832
 
833
 
SaErrorT SAHPI_API saHpiSubscribe (
834
 
        SAHPI_IN SaHpiSessionIdT SessionId)
835
12 
{
836
12 
        SaHpiDomainIdT did;
837
12 
        SaHpiBoolT session_state;
838
12 
        SaErrorT error;
839
 
840
12 
        OH_CHECK_INIT_STATE(SessionId);
841
11 
        OH_GET_DID(SessionId, did);
842
 
843
11 
        error = oh_get_session_subscription(SessionId, &session_state);
844
11 
        if (error) {
845
0 
                dbg("Error subscribing to SessionId: %d", SessionId);
846
0 
                return error;
847
 
        }
848
 
849
11 
        if (session_state != OH_UNSUBSCRIBED) {
850
1 
                dbg("Cannot subscribe if session is not unsubscribed.");
851
1 
                return SA_ERR_HPI_DUPLICATE;
852
 
        }
853
 
854
10 
        error = oh_set_session_subscription(SessionId, SAHPI_TRUE);
855
 
856
10 
        return error;
857
 
}
858
 
859
 
SaErrorT SAHPI_API saHpiUnsubscribe (
860
 
        SAHPI_IN SaHpiSessionIdT SessionId)
861
11 
{
862
11 
        SaHpiDomainIdT did;
863
11 
        SaHpiBoolT session_state;
864
11 
        SaErrorT error;
865
11 
        SaErrorT terror = SA_OK;
866
11 
        struct oh_event event;
867
 
868
11 
        OH_CHECK_INIT_STATE(SessionId);
869
10 
        OH_GET_DID(SessionId, did);
870
 
871
10 
        error = oh_get_session_subscription(SessionId, &session_state);
872
10 
        if (error) {
873
0 
                dbg("Error reading session subscription from SessionId: %d", SessionId);
874
0 
                return error;
875
 
        }
876
 
877
10 
        if (session_state == OH_UNSUBSCRIBED) {
878
1 
                dbg("Cannot unsubscribe if session is not subscribed.");
879
1 
                return SA_ERR_HPI_INVALID_REQUEST;
880
 
        }
881
 
882
9 
        error = oh_set_session_subscription(SessionId, SAHPI_FALSE);
883
9 
        if (error) {
884
0 
                dbg("Error unsubscribing to SessionId: %d", SessionId);
885
0 
                return error;
886
 
        }
887
 
888
 
        /* Flush session's event queue 
889
 
         * we use a temp error variable as the dequeue loop signals an
890
 
         * end via a TIMEOUT error.  If it is anything else, we assign it
891
 
         * to the return value.
892
 
         */
893
 
        
894
9 
        error = SA_OK;
895
 
896
18 
        while (terror == SA_OK) {
897
9 
                terror = oh_dequeue_session_event(SessionId,
898
 
                                                  SAHPI_TIMEOUT_IMMEDIATE,
899
 
                                                  &event);
900
 
        }
901
 
        
902
9 
        if(terror != SA_ERR_HPI_TIMEOUT) {
903
0 
                dbg("Unexpected error occured in clearing the event queues");
904
0 
                error = terror;
905
 
        }
906
 
907
9 
        return error;
908
 
}
909
 
910
 
SaErrorT SAHPI_API saHpiEventGet (
911
 
        SAHPI_IN    SaHpiSessionIdT      SessionId,
912
 
        SAHPI_IN    SaHpiTimeoutT        Timeout,
913
 
        SAHPI_OUT   SaHpiEventT          *Event,
914
 
        SAHPI_INOUT SaHpiRdrT            *Rdr,
915
 
        SAHPI_INOUT SaHpiRptEntryT       *RptEntry,
916
 
        SAHPI_INOUT SaHpiEvtQueueStatusT *EventQueueStatus)
917
6 
{
918
 
919
6 
        SaHpiDomainIdT did;
920
6 
        SaHpiBoolT session_state;
921
6 
        struct oh_event e;
922
6 
        SaErrorT error;
923
 
924
6 
        OH_CHECK_INIT_STATE(SessionId);
925
5 
        OH_GET_DID(SessionId, did);
926
 
927
5 
        if (Timeout < SAHPI_TIMEOUT_BLOCK || !Event) {
928
1 
                return SA_ERR_HPI_INVALID_PARAMS;
929
 
        }
930
 
931
4 
        if( !oh_run_threaded() && Timeout != SAHPI_TIMEOUT_IMMEDIATE) {
932
3 
                dbg("Can not support timeouts in non threaded mode");
933
3 
                return SA_ERR_HPI_INVALID_PARAMS;
934
 
        }
935
 
936
1 
        error = oh_get_session_subscription(SessionId, &session_state);
937
1 
        if (error) return error;
938
 
939
1 
        if (session_state != OH_SUBSCRIBED) {
940
0 
                return SA_ERR_HPI_INVALID_REQUEST;
941
 
        }
942
 
943
1 
        if ( !oh_run_threaded() ) {
944
1 
                error = oh_get_events();
945
1 
                if (error < 0) return SA_ERR_HPI_UNKNOWN;
946
 
        }
947
 
948
1 
        error = oh_dequeue_session_event(SessionId, Timeout, &e);
949
1 
        if (error) return error;
950
 
951
 
        /* Return event, resource and rdr */
952
0 
        *Event = e.u.hpi_event.event;
953
 
954
 
        /* EventQueueStatus may be NULL if you don't care */
955
0 
        if(EventQueueStatus) {
956
0 
                *EventQueueStatus = 0x0000;
957
 
        }
958
 
959
0 
        if (RptEntry && e.u.hpi_event.res.ResourceId != 0) {
960
0 
                *RptEntry = e.u.hpi_event.res;
961
 
        }
962
 
963
0 
        if (Rdr && e.u.hpi_event.rdr.RecordId != 0) {
964
0 
                *Rdr = e.u.hpi_event.rdr;
965
 
        }
966
 
967
0 
        return SA_OK;
968
 
}
969
 
970
 
SaErrorT SAHPI_API saHpiEventAdd (
971
 
        SAHPI_IN SaHpiSessionIdT SessionId,
972
 
        SAHPI_IN SaHpiEventT     *EvtEntry)
973
9 
{
974
9 
        SaHpiDomainIdT did;
975
9 
        struct oh_event e;
976
9 
        GArray *session_list = NULL;
977
9 
        SaErrorT error;
978
9 
        unsigned int i;
979
 
980
9 
	error = oh_valid_addevent(EvtEntry);
981
9 
	if (error) return(error);
982
 
983
2 
        OH_CHECK_INIT_STATE(SessionId);
984
2 
        OH_GET_DID(SessionId, did);
985
 
986
2 
        e.did = did;
987
2 
        e.hid = 0;
988
2 
        e.type = OH_ET_HPI;
989
2 
        e.u.hpi_event.event = *EvtEntry;
990
 
991
2 
        session_list = oh_list_sessions(did);
992
4 
        for (i = 0; i < session_list->len; i++) {
993
2 
                error = oh_queue_session_event(SessionId, &e);
994
2 
                if (error) break;
995
 
        }
996
2 
        g_array_free(session_list, TRUE);
997
 
998
2 
        return error;
999
 
}
1000
 
1001
 
/*********************************************************************
1002
 
 *
1003
 
 *  DAT Functions
1004
 
 *
1005
 
 ********************************************************************/
1006
 
1007
 
SaErrorT SAHPI_API saHpiAlarmGetNext (
1008
 
                SAHPI_IN SaHpiSessionIdT SessionId,
1009
 
                SAHPI_IN SaHpiSeverityT  Severity,
1010
 
                SAHPI_IN SaHpiBoolT      UnacknowledgedOnly,
1011
 
                SAHPI_INOUT SaHpiAlarmT  *Alarm)
1012
0 
{
1013
0 
        return SA_ERR_HPI_UNSUPPORTED_API;
1014
 
}
1015
 
1016
 
SaErrorT SAHPI_API saHpiAlarmGet(
1017
 
                SAHPI_IN SaHpiSessionIdT SessionId,
1018
 
                SAHPI_IN SaHpiAlarmIdT   AlarmId,
1019
 
                SAHPI_OUT SaHpiAlarmT    *Alarm)
1020
0 
{
1021
0 
        return SA_ERR_HPI_UNSUPPORTED_API;
1022
 
}
1023
 
1024
 
SaErrorT SAHPI_API saHpiAlarmAcknowledge(
1025
 
                SAHPI_IN SaHpiSessionIdT SessionId,
1026
 
                SAHPI_IN SaHpiAlarmIdT   AlarmId,
1027
 
                SAHPI_IN SaHpiSeverityT  Severity)
1028
0 
{
1029
0 
        return SA_ERR_HPI_UNSUPPORTED_API;
1030
 
}
1031
 
1032
 
SaErrorT SAHPI_API saHpiAlarmAdd(
1033
 
                SAHPI_IN SaHpiSessionIdT SessionId,
1034
 
                SAHPI_INOUT SaHpiAlarmT  *Alarm)
1035
0 
{
1036
0 
        return SA_ERR_HPI_UNSUPPORTED_API;
1037
 
}
1038
 
1039
 
SaErrorT SAHPI_API saHpiAlarmDelete(
1040
 
                SAHPI_IN SaHpiSessionIdT SessionId,
1041
 
                SAHPI_IN SaHpiAlarmIdT   AlarmId,
1042
 
                SAHPI_IN SaHpiSeverityT  Severity)
1043
0 
{
1044
0 
        return SA_ERR_HPI_UNSUPPORTED_API;
1045
 
}
1046
 
1047
 
/*********************************************************************
1048
 
 *
1049
 
 *  RDR Functions
1050
 
 *
1051
 
 ********************************************************************/
1052
 
1053
 
SaErrorT SAHPI_API saHpiRdrGet (
1054
 
        SAHPI_IN  SaHpiSessionIdT  SessionId,
1055
 
        SAHPI_IN  SaHpiResourceIdT ResourceId,
1056
 
        SAHPI_IN  SaHpiEntryIdT    EntryId,
1057
 
        SAHPI_OUT SaHpiEntryIdT    *NextEntryId,
1058
 
        SAHPI_OUT SaHpiRdrT        *Rdr)
1059
830 
{
1060
830 
        struct oh_domain *d;
1061
830 
        SaHpiDomainIdT did;
1062
830 
        SaHpiRptEntryT *res = NULL;
1063
830 
        SaHpiRdrT *rdr_cur;
1064
830 
        SaHpiRdrT *rdr_next;
1065
 
1066
830 
        OH_CHECK_INIT_STATE(SessionId);
1067
828 
        OH_GET_DID(SessionId, did);
1068
 
1069
 
        /* Test pointer parameters for invalid pointers */
1070
828 
        if (EntryId == SAHPI_LAST_ENTRY || !Rdr || !NextEntryId)
1071
 
        {
1072
2 
                return SA_ERR_HPI_INVALID_PARAMS;
1073
 
        }
1074
 
1075
826 
        OH_GET_DOMAIN(did, d); /* Lock domain */
1076
 
1077
826 
        OH_RESOURCE_GET(d, ResourceId, res);
1078
 
1079
825 
        if(!(res->ResourceCapabilities & SAHPI_CAPABILITY_RDR)) {
1080
12 
                dbg("No RDRs for Resource %d in Domain %d",ResourceId,did);
1081
12 
                oh_release_domain(d); /* Unlock domain */
1082
12 
                return SA_ERR_HPI_CAPABILITY;
1083
 
        }
1084
 
1085
813 
        if(EntryId == SAHPI_FIRST_ENTRY) {
1086
217 
                rdr_cur = oh_get_rdr_next(&(d->rpt), ResourceId, SAHPI_FIRST_ENTRY);
1087
 
        } else {
1088
596 
                rdr_cur = oh_get_rdr_by_id(&(d->rpt), ResourceId, EntryId);
1089
 
        }
1090
 
1091
813 
        if (rdr_cur == NULL) {
1092
1 
                dbg("Requested RDR, Domain[%d]->Resource[%d]->RDR[%d], is not present",
1093
 
                    did, ResourceId, EntryId);
1094
1 
                oh_release_domain(d); /* Unlock domain */
1095
1 
                return SA_ERR_HPI_NOT_PRESENT;
1096
 
        }
1097
 
1098
812 
        memcpy(Rdr, rdr_cur, sizeof(*Rdr));
1099
 
1100
812 
        rdr_next = oh_get_rdr_next(&(d->rpt), ResourceId, rdr_cur->RecordId);
1101
812 
        if(rdr_next == NULL) {
1102
149 
                *NextEntryId = SAHPI_LAST_ENTRY;
1103
 
        } else {
1104
663 
                *NextEntryId = rdr_next->RecordId;
1105
 
        }
1106
 
1107
812 
        oh_release_domain(d); /* Unlock domain */
1108
 
1109
812 
        return SA_OK;
1110
 
}
1111
 
1112
 
SaErrorT SAHPI_API saHpiRdrGetByInstrumentId (
1113
 
        SAHPI_IN  SaHpiSessionIdT    SessionId,
1114
 
        SAHPI_IN  SaHpiResourceIdT   ResourceId,
1115
 
        SAHPI_IN  SaHpiRdrTypeT      RdrType,
1116
 
        SAHPI_IN  SaHpiInstrumentIdT InstrumentId,
1117
 
        SAHPI_OUT SaHpiRdrT          *Rdr)
1118
0 
{
1119
0 
        SaHpiRptEntryT *res = NULL;
1120
0 
        SaHpiRdrT *rdr_cur;
1121
0 
        SaHpiDomainIdT did;
1122
0 
        struct oh_domain *d = NULL;
1123
 
1124
 
        /* Test pointer parameters for invalid pointers */
1125
0 
        if (!oh_lookup_rdrtype(RdrType) ||
1126
 
            RdrType == SAHPI_NO_RECORD || !Rdr)
1127
 
        {
1128
0 
                return SA_ERR_HPI_INVALID_PARAMS;
1129
 
        }
1130
 
1131
0 
        OH_CHECK_INIT_STATE(SessionId);
1132
0 
        OH_GET_DID(SessionId, did);
1133
0 
        OH_GET_DOMAIN(did, d); /* Lock domain */
1134
 
1135
0 
        OH_RESOURCE_GET(d, ResourceId, res);
1136
 
1137
0 
        if(!(res->ResourceCapabilities & SAHPI_CAPABILITY_RDR)) {
1138
0 
                dbg("No RDRs for Resource %d in Domain %d",ResourceId,did);
1139
0 
                oh_release_domain(d); /* Unlock domain */
1140
0 
                return SA_ERR_HPI_CAPABILITY;
1141
 
        }
1142
 
1143
0 
        rdr_cur = oh_get_rdr_by_type(&(d->rpt), ResourceId, RdrType, InstrumentId);
1144
 
1145
0 
        if (rdr_cur == NULL) {
1146
0 
                dbg("Requested RDR, Domain[%d]->Resource[%d]->RDR[%d,%d], is not present",
1147
 
                    did, ResourceId, RdrType, InstrumentId);
1148
0 
                oh_release_domain(d); /* Unlock domain */
1149
0 
                return SA_ERR_HPI_NOT_PRESENT;
1150
 
        }
1151
0 
        memcpy(Rdr, rdr_cur, sizeof(*Rdr));
1152
0 
        oh_release_domain(d); /* Unlock domain */
1153
 
1154
 
1155
0 
        return SA_OK;
1156
 
}
1157
 
1158
 
/*********************************************************************
1159
 
 *
1160
 
 *  Sensor Functions
1161
 
 *
1162
 
 ********************************************************************/
1163
 
1164
 
SaErrorT SAHPI_API saHpiSensorReadingGet (
1165
 
        SAHPI_IN    SaHpiSessionIdT     SessionId,
1166
 
        SAHPI_IN    SaHpiResourceIdT    ResourceId,
1167
 
        SAHPI_IN    SaHpiSensorNumT     SensorNum,
1168
 
        SAHPI_INOUT SaHpiSensorReadingT *Reading,
1169
 
        SAHPI_INOUT SaHpiEventStateT    *EventState)
1170
1 
{
1171
1 
        SaErrorT rv;
1172
 
        SaErrorT (*get_func) (void *, SaHpiResourceIdT, SaHpiSensorNumT,
1173
1 
                              SaHpiSensorReadingT *, SaHpiEventStateT *);
1174
 
1175
1 
        struct oh_handler *h;
1176
1 
        SaHpiRptEntryT *res;
1177
1 
        SaHpiRdrT *rdr;
1178
1 
        SaHpiDomainIdT did;
1179
1 
        struct oh_domain *d = NULL;
1180
 
1181
1 
        OH_CHECK_INIT_STATE(SessionId);
1182
1 
        OH_GET_DID(SessionId, did);
1183
1 
        OH_GET_DOMAIN(did, d); /* Lock domain */
1184
1 
        OH_RESOURCE_GET(d, ResourceId, res);
1185
 
1186
1 
        if(!(res->ResourceCapabilities & SAHPI_CAPABILITY_SENSOR)) {
1187
1 
                dbg("Resource %d in Domain %d doesn't have sensors",
1188
 
                    ResourceId, did);
1189
1 
                oh_release_domain(d); /* Unlock domain */
1190
1 
                return SA_ERR_HPI_CAPABILITY;
1191
 
        }
1192
 
1193
0 
        rdr = oh_get_rdr_by_type(&(d->rpt), ResourceId, SAHPI_SENSOR_RDR, SensorNum);
1194
 
1195
0 
        if (!rdr) {
1196
0 
                dbg("No Sensor %d found for ResourceId %d in Domain %d",
1197
 
                    SensorNum, ResourceId, did);
1198
0 
                oh_release_domain(d); /* Unlock domain */
1199
0 
                return SA_ERR_HPI_NOT_PRESENT;
1200
 
        }
1201
 
1202
0 
        OH_HANDLER_GET(d, ResourceId, h);
1203
0 
        oh_release_domain(d); /* Unlock domain */
1204
 
1205
0 
        get_func = h->abi->get_sensor_reading;
1206
 
1207
0 
        if (!get_func) {
1208
0 
                return SA_ERR_HPI_INVALID_CMD;
1209
 
        }
1210
 
1211
0 
        rv = get_func(h->hnd, ResourceId, SensorNum, Reading, EventState);
1212
 
1213
0 
        return rv;
1214
 
}
1215
 
1216
 
SaErrorT SAHPI_API saHpiSensorThresholdsGet (
1217
 
        SAHPI_IN SaHpiSessionIdT        SessionId,
1218
 
        SAHPI_IN SaHpiResourceIdT       ResourceId,
1219
 
        SAHPI_IN SaHpiSensorNumT        SensorNum,
1220
 
        SAHPI_IN SaHpiSensorThresholdsT *SensorThresholds)
1221
19 
{
1222
19 
        SaErrorT rv;
1223
 
        SaErrorT (*get_func) (void *, SaHpiResourceIdT, SaHpiSensorNumT,
1224
19 
                              SaHpiSensorThresholdsT *);
1225
19 
        SaHpiRptEntryT *res;
1226
19 
        struct oh_handler *h;
1227
19 
        SaHpiDomainIdT did;
1228
19 
        struct oh_domain *d = NULL;
1229
 
1230
19 
        if (!SensorThresholds) return SA_ERR_HPI_INVALID_PARAMS;
1231
 
1232
17 
        OH_CHECK_INIT_STATE(SessionId);
1233
15 
        OH_GET_DID(SessionId, did);
1234
15 
        OH_GET_DOMAIN(did, d); /* Lock domain */
1235
15 
        OH_RESOURCE_GET(d, ResourceId, res);
1236
 
1237
13 
        if(!(res->ResourceCapabilities & SAHPI_CAPABILITY_SENSOR)) {
1238
1 
                dbg("Resource %d in Domain %d doesn't have sensors",
1239
 
                    ResourceId, did);
1240
1 
                oh_release_domain(d); /* Unlock domain */
1241
1 
                return SA_ERR_HPI_CAPABILITY;
1242
 
        }
1243
 
1244
12 
        OH_HANDLER_GET(d, ResourceId, h);
1245
12 
        oh_release_domain(d); /* Unlock domain */
1246
 
1247
12 
        get_func = h->abi->get_sensor_thresholds;
1248
 
1249
12 
        if (!get_func) {
1250
0 
                return SA_ERR_HPI_INVALID_CMD;
1251
 
        }
1252
 
1253
12 
        rv = get_func(h->hnd, ResourceId, SensorNum, SensorThresholds);
1254
 
1255
12 
        return rv;
1256
 
}
1257
 
1258
 
SaErrorT SAHPI_API saHpiSensorThresholdsSet (
1259
 
        SAHPI_IN  SaHpiSessionIdT        SessionId,
1260
 
        SAHPI_IN  SaHpiResourceIdT       ResourceId,
1261
 
        SAHPI_IN  SaHpiSensorNumT        SensorNum,
1262
 
        SAHPI_OUT SaHpiSensorThresholdsT *SensorThresholds)
1263
19 
{
1264
19 
        SaErrorT rv;
1265
 
        SaErrorT (*set_func) (void *, SaHpiResourceIdT, SaHpiSensorNumT,
1266
19 
                              const SaHpiSensorThresholdsT *);
1267
19 
        SaHpiRptEntryT *res;
1268
19 
        SaHpiRdrT *rdr;
1269
19 
        struct oh_handler *h;
1270
19 
        SaHpiDomainIdT did;
1271
19 
        struct oh_domain *d = NULL;
1272
 
1273
19 
        if (!SensorThresholds) return SA_ERR_HPI_INVALID_DATA;
1274
 
1275
17 
        OH_CHECK_INIT_STATE(SessionId);
1276
15 
        OH_GET_DID(SessionId, did);
1277
15 
        OH_GET_DOMAIN(did, d); /* Lock domain */
1278
15 
        OH_RESOURCE_GET(d, ResourceId, res);
1279
 
1280
13 
        if(!(res->ResourceCapabilities & SAHPI_CAPABILITY_SENSOR)) {
1281
1 
                dbg("Resource %d in Domain %d doesn't have sensors",ResourceId,did);
1282
1 
                oh_release_domain(d); /* Unlock domain */
1283
1 
                return SA_ERR_HPI_CAPABILITY;
1284
 
        }
1285
 
1286
12 
        rdr = oh_get_rdr_by_type(&(d->rpt), ResourceId, SAHPI_SENSOR_RDR, SensorNum);
1287
 
1288
12 
        if (!rdr) {
1289
2 
                dbg("No Sensor %d found for ResourceId %d in Domain %d",
1290
 
                    SensorNum, ResourceId, did);
1291
2 
                oh_release_domain(d);
1292
2 
                return SA_ERR_HPI_NOT_PRESENT;
1293
 
        }
1294
 
1295
10 
        OH_HANDLER_GET(d, ResourceId, h);
1296
10 
        oh_release_domain(d); /* Unlock domain */
1297
 
1298
10 
        set_func = h->abi->set_sensor_thresholds;
1299
10 
        if (!set_func) {
1300
0 
                return SA_ERR_HPI_INVALID_CMD;
1301
 
        }
1302
 
1303
10 
        rv = set_func(h->hnd, ResourceId, SensorNum, SensorThresholds);
1304
 
1305
10 
        return rv;
1306
 
}
1307
 
1308
 
SaErrorT SAHPI_API saHpiSensorTypeGet (
1309
 
        SAHPI_IN  SaHpiSessionIdT     SessionId,
1310
 
        SAHPI_IN  SaHpiResourceIdT    ResourceId,
1311
 
        SAHPI_IN  SaHpiSensorNumT     SensorNum,
1312
 
        SAHPI_OUT SaHpiSensorTypeT    *Type,
1313
 
        SAHPI_OUT SaHpiEventCategoryT *Category)
1314
15 
{
1315
15 
        SaHpiRptEntryT *res;
1316
15 
        SaHpiRdrT *rdr;
1317
15 
        SaHpiDomainIdT did;
1318
15 
        struct oh_domain *d = NULL;
1319
 
1320
15 
        if (!Type || !Category) return SA_ERR_HPI_INVALID_PARAMS;
1321
 
1322
11 
        OH_CHECK_INIT_STATE(SessionId);
1323
9 
        OH_GET_DID(SessionId, did);
1324
9 
        OH_GET_DOMAIN(did, d); /* Lock domain */
1325
9 
        OH_RESOURCE_GET(d, ResourceId, res);
1326
 
1327
7 
        if(!(res->ResourceCapabilities & SAHPI_CAPABILITY_SENSOR)) {
1328
1 
                dbg("Resource %d in Domain %d doesn't have sensors",
1329
 
                    ResourceId, did);
1330
1 
                oh_release_domain(d); /* Unlock domain */
1331
1 
                return SA_ERR_HPI_CAPABILITY;
1332
 
        }
1333
 
1334
6 
        rdr = oh_get_rdr_by_type(&(d->rpt), ResourceId, SAHPI_SENSOR_RDR, SensorNum);
1335
 
1336
6 
        if (!rdr) {
1337
2 
                dbg("No Sensor num %d found for Resource %d in Domain %d",
1338
 
                    SensorNum, ResourceId, did);
1339
2 
                oh_release_domain(d); /* Unlock domain */
1340
2 
                return SA_ERR_HPI_NOT_PRESENT;
1341
 
        }
1342
 
1343
4 
        memcpy(Type,
1344
 
               &(rdr->RdrTypeUnion.SensorRec.Type),
1345
 
               sizeof(SaHpiSensorTypeT));
1346
 
1347
4 
        memcpy(Category,
1348
 
               &(rdr->RdrTypeUnion.SensorRec.Category),
1349
 
               sizeof(SaHpiEventCategoryT));
1350
 
1351
4 
        oh_release_domain(d); /* Unlock domain */
1352
 
1353
4 
        return SA_OK;
1354
 
}
1355
 
1356
 
SaErrorT SAHPI_API saHpiSensorEnableGet (
1357
 
        SAHPI_IN  SaHpiSessionIdT  SessionId,
1358
 
        SAHPI_IN  SaHpiResourceIdT ResourceId,
1359
 
        SAHPI_IN  SaHpiSensorNumT  SensorNum,
1360
 
        SAHPI_OUT SaHpiBoolT       *SensorEnabled)
1361
34 
{
1362
34 
        SaErrorT rv;
1363
 
        SaErrorT (*get_sensor_enable)(void *hnd, SaHpiResourceIdT,
1364
 
                                      SaHpiSensorNumT,
1365
34 
                                      SaHpiBoolT *enable);
1366
 
1367
34 
        SaHpiRptEntryT *res;
1368
34 
        struct oh_handler *h;
1369
34 
        SaHpiDomainIdT did;
1370
34 
        struct oh_domain *d = NULL;
1371
 
1372
34 
        if (!SensorEnabled) return SA_ERR_HPI_INVALID_PARAMS;
1373
 
1374
30 
        OH_CHECK_INIT_STATE(SessionId);
1375
28 
        OH_GET_DID(SessionId, did);
1376
28 
        OH_GET_DOMAIN(did, d); /* Lock domain */
1377
28 
        OH_RESOURCE_GET(d, ResourceId, res);
1378
 
1379
26 
        if(!(res->ResourceCapabilities & SAHPI_CAPABILITY_SENSOR)) {
1380
1 
                dbg("Resource %d doesn't have sensors in Domain %d",
1381
 
                    ResourceId, did);
1382
1 
                oh_release_domain(d); /* Unlock domain */
1383
1 
                return SA_ERR_HPI_CAPABILITY;
1384
 
        }
1385
 
1386
25 
        OH_HANDLER_GET(d, ResourceId, h);
1387
25 
        oh_release_domain(d); /* Unlock domain */
1388
 
1389
25 
        get_sensor_enable = h->abi->get_sensor_enable;
1390
25 
        if (!get_sensor_enable) {
1391
25 
                return SA_ERR_HPI_INVALID_CMD;
1392
 
        }
1393
 
1394
0 
        rv = get_sensor_enable(h->hnd, ResourceId, SensorNum, SensorEnabled);
1395
0 
	return rv;
1396
 
}
1397
 
1398
 
SaErrorT SAHPI_API saHpiSensorEnableSet (
1399
 
        SAHPI_IN SaHpiSessionIdT  SessionId,
1400
 
        SAHPI_IN SaHpiResourceIdT ResourceId,
1401
 
        SAHPI_IN SaHpiSensorNumT  SensorNum,
1402
 
        SAHPI_IN SaHpiBoolT       SensorEnabled)
1403
2 
{
1404
2 
        SaErrorT rv;
1405
 
        SaErrorT (*set_sensor_enable)(void *hnd, SaHpiResourceIdT,
1406
 
                                      SaHpiSensorNumT,
1407
2 
                                      SaHpiBoolT enable);
1408
2 
        SaHpiRptEntryT *res;
1409
2 
        struct oh_handler *h;
1410
2 
        SaHpiDomainIdT did;
1411
2 
        struct oh_domain *d = NULL;
1412
 
1413
2 
        OH_CHECK_INIT_STATE(SessionId);
1414
2 
        OH_GET_DID(SessionId, did);
1415
2 
        OH_GET_DOMAIN(did, d); /* Lock domain */
1416
2 
        OH_RESOURCE_GET(d, ResourceId, res);
1417
 
1418
2 
        if(!(res->ResourceCapabilities & SAHPI_CAPABILITY_SENSOR)) {
1419
1 
                dbg("Resource %d doesn't have sensors in Domain %d",
1420
 
                    ResourceId, did);
1421
1 
                oh_release_domain(d); /* Unlock domain */
1422
1 
                return SA_ERR_HPI_CAPABILITY;
1423
 
        }
1424
 
1425
1 
        OH_HANDLER_GET(d, ResourceId, h);
1426
1 
        oh_release_domain(d); /* Unlock domain */
1427
 
1428
1 
        set_sensor_enable = h->abi->set_sensor_enable;
1429
1 
        if (!set_sensor_enable) {
1430
1 
                return SA_ERR_HPI_INVALID_CMD;
1431
 
        }
1432
 
1433
0 
        rv = set_sensor_enable(h->hnd, ResourceId, SensorNum, SensorEnabled);
1434
 
1435
0 
        return rv;
1436
 
}
1437
 
1438
 
SaErrorT SAHPI_API saHpiSensorEventEnableGet (
1439
 
        SAHPI_IN  SaHpiSessionIdT  SessionId,
1440
 
        SAHPI_IN  SaHpiResourceIdT ResourceId,
1441
 
        SAHPI_IN  SaHpiSensorNumT  SensorNum,
1442
 
        SAHPI_OUT SaHpiBoolT       *SensorEventsEnabled)
1443
17 
{
1444
17 
        SaErrorT rv;
1445
 
        SaErrorT (*get_sensor_event_enables)(void *hnd, SaHpiResourceIdT,
1446
 
                                             SaHpiSensorNumT,
1447
17 
                                             SaHpiBoolT *enables);
1448
 
1449
17 
        SaHpiRptEntryT *res;
1450
17 
        struct oh_handler *h;
1451
17 
        SaHpiDomainIdT did;
1452
17 
        struct oh_domain *d = NULL;
1453
 
1454
17 
        if (!SensorEventsEnabled) return SA_ERR_HPI_INVALID_PARAMS;
1455
 
1456
13 
        OH_CHECK_INIT_STATE(SessionId);
1457
11 
        OH_GET_DID(SessionId, did);
1458
11 
        OH_GET_DOMAIN(did, d); /* Lock domain */
1459
11 
        OH_RESOURCE_GET(d, ResourceId, res);
1460
 
1461
9 
        if(!(res->ResourceCapabilities & SAHPI_CAPABILITY_SENSOR)) {
1462
1 
                dbg("Resource %d doesn't have sensors in Domain %d",
1463
 
                    ResourceId, did);
1464
1 
                oh_release_domain(d); /* Unlock domain */
1465
1 
                return SA_ERR_HPI_CAPABILITY;
1466
 
        }
1467
 
1468
8 
        OH_HANDLER_GET(d, ResourceId, h);
1469
8 
        oh_release_domain(d); /* Unlock domain */
1470
 
1471
8 
        get_sensor_event_enables = h->abi->get_sensor_event_enables;
1472
8 
        if (!get_sensor_event_enables) {
1473
0 
                return SA_ERR_HPI_INVALID_CMD;
1474
 
        }
1475
 
1476
8 
        rv = get_sensor_event_enables(h->hnd, ResourceId, SensorNum, SensorEventsEnabled);
1477
 
1478
8 
        return rv;
1479
 
}
1480
 
1481
 
SaErrorT SAHPI_API saHpiSensorEventEnableSet (
1482
 
        SAHPI_IN SaHpiSessionIdT  SessionId,
1483
 
        SAHPI_IN SaHpiResourceIdT ResourceId,
1484
 
        SAHPI_IN SaHpiSensorNumT  SensorNum,
1485
 
        SAHPI_IN SaHpiBoolT       SensorEventsEnabled)
1486
13 
{
1487
13 
        SaErrorT rv;
1488
 
        SaErrorT (*set_sensor_event_enables)(void *hnd, SaHpiResourceIdT,
1489
 
                                             SaHpiSensorNumT,
1490
13 
                                             const SaHpiBoolT enables);
1491
13 
        SaHpiRptEntryT *res;
1492
13 
        struct oh_handler *h;
1493
13 
        SaHpiDomainIdT did;
1494
13 
        struct oh_domain *d = NULL;
1495
 
1496
13 
        OH_CHECK_INIT_STATE(SessionId);
1497
11 
        OH_GET_DID(SessionId, did);
1498
11 
        OH_GET_DOMAIN(did, d); /* Lock domain */
1499
11 
        OH_RESOURCE_GET(d, ResourceId, res);
1500
 
1501
9 
        if(!(res->ResourceCapabilities & SAHPI_CAPABILITY_SENSOR)) {
1502
1 
                dbg("Resource %d doesn't have sensors in Domain %d",
1503
 
                    ResourceId, did);
1504
1 
                oh_release_domain(d); /* Unlock domain */
1505
1 
                return SA_ERR_HPI_CAPABILITY;
1506
 
        }
1507
 
1508
8 
        OH_HANDLER_GET(d, ResourceId, h);
1509
8 
        oh_release_domain(d); /* Unlock domain */
1510
 
1511
8 
        set_sensor_event_enables = h->abi->set_sensor_event_enables;
1512
8 
        if (!set_sensor_event_enables) {
1513
0 
                return SA_ERR_HPI_INVALID_CMD;
1514
 
        }
1515
 
1516
8 
        rv = set_sensor_event_enables(h->hnd, ResourceId, SensorNum, SensorEventsEnabled);
1517
 
1518
8 
        return rv;
1519
 
}
1520
 
1521
 
SaErrorT SAHPI_API saHpiSensorEventMasksGet (
1522
 
        SAHPI_IN  SaHpiSessionIdT         SessionId,
1523
 
        SAHPI_IN  SaHpiResourceIdT        ResourceId,
1524
 
        SAHPI_IN  SaHpiSensorNumT         SensorNum,
1525
 
        SAHPI_INOUT SaHpiEventStateT      *AssertEventMask,
1526
 
        SAHPI_INOUT SaHpiEventStateT      *DeassertEventMask)
1527
7 
{
1528
7 
        SaErrorT rv;
1529
 
        SaErrorT (*get_sensor_event_masks)(void *hnd, SaHpiResourceIdT,
1530
 
                                           SaHpiSensorNumT,
1531
 
                                           SaHpiEventStateT   *AssertEventMask,
1532
7 
                                           SaHpiEventStateT   *DeassertEventMask);
1533
7 
        SaHpiRptEntryT *res;
1534
7 
        struct oh_handler *h;
1535
7 
        SaHpiDomainIdT did;
1536
7 
        struct oh_domain *d = NULL;
1537
 
1538
7 
        if (!AssertEventMask) return SA_ERR_HPI_INVALID_PARAMS;
1539
7 
        if (!DeassertEventMask) return SA_ERR_HPI_INVALID_PARAMS;
1540
 
1541
 
1542
7 
        OH_CHECK_INIT_STATE(SessionId);
1543
5 
        OH_GET_DID(SessionId, did);
1544
5 
        OH_GET_DOMAIN(did, d); /* Lock domain */
1545
5 
        OH_RESOURCE_GET(d, ResourceId, res);
1546
 
1547
3 
        if(!(res->ResourceCapabilities & SAHPI_CAPABILITY_SENSOR)) {
1548
1 
                dbg("Resource %d doesn't have sensors in Domain %d",
1549
 
                    ResourceId, did);
1550
1 
                oh_release_domain(d); /* Unlock domain */
1551
1 
                return SA_ERR_HPI_CAPABILITY;
1552
 
        }
1553
 
1554
2 
        OH_HANDLER_GET(d, ResourceId, h);
1555
2 
        oh_release_domain(d); /* Unlock domain */
1556
 
1557
2 
        get_sensor_event_masks = h->abi->get_sensor_event_masks;
1558
2 
        if (!get_sensor_event_masks) {
1559
2 
                return SA_ERR_HPI_INVALID_CMD;
1560
 
        }
1561
 
1562
0 
        rv = get_sensor_event_masks(h->hnd, ResourceId, SensorNum,
1563
 
                                    AssertEventMask, DeassertEventMask);
1564
0 
        return rv;
1565
 
}
1566
 
1567
 
SaErrorT SAHPI_API saHpiSensorEventMasksSet (
1568
 
        SAHPI_IN  SaHpiSessionIdT                 SessionId,
1569
 
        SAHPI_IN  SaHpiResourceIdT                ResourceId,
1570
 
        SAHPI_IN  SaHpiSensorNumT                 SensorNum,
1571
 
        SAHPI_IN  SaHpiSensorEventMaskActionT     Action,
1572
 
        SAHPI_IN  SaHpiEventStateT                AssertEventMask,
1573
 
        SAHPI_IN  SaHpiEventStateT                DeassertEventMask)
1574
8 
{
1575
8 
        SaErrorT rv;
1576
 
        SaErrorT (*set_sensor_event_masks)(void *hnd, SaHpiResourceIdT,
1577
 
                                           SaHpiSensorNumT,
1578
 
					   SaHpiSensorEventMaskActionT   Action,
1579
 
                                           SaHpiEventStateT   AssertEventMask,
1580
8 
                                           SaHpiEventStateT   DeassertEventMask);
1581
8 
        SaHpiRptEntryT *res;
1582
8 
        struct oh_handler *h;
1583
8 
        SaHpiDomainIdT did;
1584
8 
        struct oh_domain *d = NULL;
1585
 
1586
8 
        OH_CHECK_INIT_STATE(SessionId);
1587
6 
        OH_GET_DID(SessionId, did);
1588
6 
        OH_GET_DOMAIN(did, d); /* Lock domain */
1589
6 
        OH_RESOURCE_GET(d, ResourceId, res);
1590
 
1591
4 
        if(!(res->ResourceCapabilities & SAHPI_CAPABILITY_SENSOR)) {
1592
2 
                dbg("Resource %d doesn't have sensors in Domain %d",
1593
 
                    ResourceId, did);
1594
2 
                oh_release_domain(d); /* Unlock domain */
1595
2 
                return SA_ERR_HPI_CAPABILITY;
1596
 
        }
1597
 
1598
2 
        OH_HANDLER_GET(d, ResourceId, h);
1599
2 
        oh_release_domain(d); /* Unlock domain */
1600
 
1601
2 
        set_sensor_event_masks = h->abi->set_sensor_event_masks;
1602
2 
        if (!set_sensor_event_masks) {
1603
2 
                return SA_ERR_HPI_INVALID_CMD;
1604
 
        }
1605
 
1606
0 
        rv = set_sensor_event_masks(h->hnd, ResourceId, SensorNum,
1607
 
				    Action,
1608
 
                                    AssertEventMask,
1609
 
                                    DeassertEventMask);
1610
0 
        return rv;
1611
 
}
1612
 
1613
 
/* End Sensor functions */
1614
 
1615
 
/*********************************************************************
1616
 
 *
1617
 
 *  Control Functions
1618
 
 *
1619
 
 ********************************************************************/
1620
 
1621
 
SaErrorT SAHPI_API saHpiControlTypeGet (
1622
 
        SAHPI_IN  SaHpiSessionIdT  SessionId,
1623
 
        SAHPI_IN  SaHpiResourceIdT ResourceId,
1624
 
        SAHPI_IN  SaHpiCtrlNumT    CtrlNum,
1625
 
        SAHPI_OUT SaHpiCtrlTypeT   *Type)
1626
6 
{
1627
6 
        SaHpiRptEntryT *res;
1628
6 
        SaHpiRdrT *rdr;
1629
6 
        SaHpiDomainIdT did;
1630
6 
        struct oh_domain *d = NULL;
1631
 
1632
6 
        if (!Type) return SA_ERR_HPI_INVALID_PARAMS;
1633
 
1634
5 
        OH_CHECK_INIT_STATE(SessionId);
1635
4 
        OH_GET_DID(SessionId, did);
1636
4 
        OH_GET_DOMAIN(did, d); /* Lock domain */
1637
4 
        OH_RESOURCE_GET(d, ResourceId, res);
1638
 
1639
3 
        if(!(res->ResourceCapabilities & SAHPI_CAPABILITY_CONTROL)) {
1640
1 
                dbg("Resource %d in Domain %d doesn't have controls",
1641
 
                    ResourceId,did);
1642
1 
                oh_release_domain(d); /* Unlock domain */
1643
1 
                return SA_ERR_HPI_CAPABILITY;
1644
 
        }
1645
 
1646
2 
        rdr = oh_get_rdr_by_type(&(d->rpt), ResourceId, SAHPI_CTRL_RDR, CtrlNum);
1647
2 
        if (!rdr) {
1648
0 
                oh_release_domain(d); /* Unlock domain */
1649
0 
                return SA_ERR_HPI_NOT_PRESENT;
1650
 
        }
1651
 
1652
2 
        memcpy(Type,
1653
 
               &(rdr->RdrTypeUnion.CtrlRec.Type),
1654
 
               sizeof(SaHpiCtrlTypeT));
1655
 
1656
2 
        oh_release_domain(d); /* Unlock domain */
1657
 
1658
2 
        return SA_OK;
1659
 
}
1660
 
1661
 
SaErrorT SAHPI_API saHpiControlGet (
1662
 
        SAHPI_IN    SaHpiSessionIdT  SessionId,
1663
 
        SAHPI_IN    SaHpiResourceIdT ResourceId,
1664
 
        SAHPI_IN    SaHpiCtrlNumT    CtrlNum,
1665
 
        SAHPI_OUT   SaHpiCtrlModeT   *CtrlMode,
1666
 
        SAHPI_INOUT SaHpiCtrlStateT  *CtrlState)
1667
6 
{
1668
6 
        SaErrorT rv;
1669
 
        SaErrorT (*get_func)(void *, SaHpiResourceIdT, SaHpiCtrlNumT,
1670
6 
                             SaHpiCtrlModeT *, SaHpiCtrlStateT *);
1671
6 
        SaHpiRptEntryT *res;
1672
6 
        struct oh_handler *h;
1673
6 
        SaHpiDomainIdT did;
1674
6 
        struct oh_domain *d = NULL;
1675
 
1676
6 
        OH_CHECK_INIT_STATE(SessionId);
1677
5 
        OH_GET_DID(SessionId, did);
1678
5 
        OH_GET_DOMAIN(did, d); /* Lock domain */
1679
5 
        OH_RESOURCE_GET(d, ResourceId, res);
1680
 
1681
4 
        if(!(res->ResourceCapabilities & SAHPI_CAPABILITY_CONTROL)) {
1682
2 
                dbg("Resource %d in Domain %d doesn't have controls",
1683
 
                    ResourceId, d->id);
1684
2 
                oh_release_domain(d); /* Unlock domain */
1685
2 
                return SA_ERR_HPI_CAPABILITY;
1686
 
        }
1687
 
1688
2 
        OH_HANDLER_GET(d, ResourceId, h);
1689
2 
        oh_release_domain(d); /* Unlock domain */
1690
 
1691
2 
        get_func = h->abi->get_control_state;
1692
2 
        if (!get_func) {
1693
0 
                return SA_ERR_HPI_INVALID_CMD;
1694
 
        }
1695
 
1696
2 
        rv = get_func(h->hnd, ResourceId, CtrlNum, CtrlMode, CtrlState);
1697
 
1698
2 
        return rv;
1699
 
}
1700
 
1701
 
SaErrorT SAHPI_API saHpiControlSet (
1702
 
        SAHPI_IN SaHpiSessionIdT  SessionId,
1703
 
        SAHPI_IN SaHpiResourceIdT ResourceId,
1704
 
        SAHPI_IN SaHpiCtrlNumT    CtrlNum,
1705
 
        SAHPI_IN SaHpiCtrlModeT   CtrlMode,
1706
 
        SAHPI_IN SaHpiCtrlStateT  *CtrlState)
1707
7 
{
1708
7 
        SaErrorT rv;
1709
7 
        SaErrorT (*set_func)(void *, SaHpiResourceIdT, SaHpiCtrlNumT, SaHpiCtrlModeT, SaHpiCtrlStateT *);
1710
 
1711
7 
        SaHpiRptEntryT *res;
1712
7 
        struct oh_handler *h;
1713
7 
        SaHpiDomainIdT did;
1714
7 
        struct oh_domain *d = NULL;
1715
 
1716
7 
        if (!oh_lookup_ctrlmode(CtrlMode) ||
1717
 
            (CtrlMode != SAHPI_CTRL_MODE_AUTO && !CtrlState) ||
1718
 
            (CtrlState && CtrlState->Type == SAHPI_CTRL_TYPE_DIGITAL &&
1719
 
             !oh_lookup_ctrlstatedigital(CtrlState->StateUnion.Digital)) ||
1720
 
            (CtrlState && CtrlState->Type == SAHPI_CTRL_TYPE_STREAM &&
1721
 
             CtrlState->StateUnion.Stream.StreamLength > SAHPI_CTRL_MAX_STREAM_LENGTH))
1722
 
        {
1723
1 
                return SA_ERR_HPI_INVALID_PARAMS;
1724
 
        }
1725
 
1726
6 
        OH_CHECK_INIT_STATE(SessionId);
1727
5 
        OH_GET_DID(SessionId, did);
1728
5 
        OH_GET_DOMAIN(did, d); /* Lock domain */
1729
5 
        OH_RESOURCE_GET(d, ResourceId, res);
1730
 
1731
4 
        if(!(res->ResourceCapabilities & SAHPI_CAPABILITY_CONTROL)) {
1732
3 
                dbg("Resource %d in Domain %d doesn't have controls",
1733
 
                    ResourceId, did);
1734
3 
                oh_release_domain(d); /* Unlock domain */
1735
3 
                return SA_ERR_HPI_CAPABILITY;
1736
 
        }
1737
 
1738
1 
        OH_HANDLER_GET(d, ResourceId, h);
1739
1 
        oh_release_domain(d); /* Unlock domain */
1740
 
1741
1 
        set_func = h->abi->set_control_state;
1742
1 
        if (!set_func) {
1743
0 
                return SA_ERR_HPI_INVALID_CMD;
1744
 
        }
1745
 
1746
1 
        rv = set_func(h->hnd, ResourceId, CtrlNum, CtrlMode, CtrlState);
1747
 
1748
1 
        return rv;
1749
 
}
1750
 
1751
 
1752
 
/*********************************************************************
1753
 
 *
1754
 
 *  Inventory Functions
1755
 
 *
1756
 
 ********************************************************************/
1757
 
1758
 
SaErrorT SAHPI_API saHpiIdrInfoGet(
1759
 
        SAHPI_IN  SaHpiSessionIdT  SessionId,
1760
 
        SAHPI_IN  SaHpiResourceIdT ResourceId,
1761
 
        SAHPI_IN  SaHpiIdrIdT      IdrId,
1762
 
        SAHPI_OUT SaHpiIdrInfoT    *IdrInfo)
1763
114 
{
1764
 
1765
114 
        SaHpiRptEntryT *res;
1766
114 
        SaErrorT rv = SA_OK;    /* Default to SA_OK */
1767
114 
        SaHpiDomainIdT did;
1768
114 
        struct oh_domain *d = NULL;
1769
114 
        struct oh_handler *h;
1770
114 
        SaErrorT (*set_func)(void *, SaHpiResourceIdT, SaHpiIdrIdT, SaHpiIdrInfoT *);
1771
 
1772
114 
        if (IdrInfo == NULL) {
1773
1 
                dbg("NULL IdrInfo");
1774
1 
                rv =  SA_ERR_HPI_INVALID_PARAMS;
1775
 
        }
1776
 
1777
114 
        OH_CHECK_INIT_STATE(SessionId);
1778
113 
        OH_GET_DID(SessionId, did);
1779
113 
        OH_GET_DOMAIN(did, d); /* Lock domain */
1780
113 
        OH_RESOURCE_GET(d, ResourceId, res);
1781
 
1782
 
        /* Interface and conformance checking */
1783
112 
        if(!(res->ResourceCapabilities & SAHPI_CAPABILITY_INVENTORY_DATA)) {
1784
1 
                dbg("Resource %d in Domain %d doesn't have inventory data",
1785
 
                    ResourceId,did);
1786
1 
                oh_release_domain(d); /* Unlock domain */
1787
1 
                return SA_ERR_HPI_CAPABILITY;
1788
 
        }
1789
 
1790
111 
        OH_HANDLER_GET(d, ResourceId, h);
1791
111 
        oh_release_domain(d); /* Unlock domain */
1792
 
1793
111 
        set_func = h->abi->get_idr_info;
1794
111 
        if (!set_func) {
1795
0 
                dbg("Plugin does not have this function in jump table.");
1796
0 
                return SA_ERR_HPI_INVALID_CMD;
1797
 
        }
1798
 
1799
 
        /* Access Inventory Info from plugin */
1800
111 
        trace("Access IdrInfo from plugin.");
1801
111 
        rv = set_func(h->hnd, ResourceId, IdrId, IdrInfo);
1802
 
1803
111 
        return rv;
1804
 
}
1805
 
1806
 
SaErrorT SAHPI_API saHpiIdrAreaHeaderGet(
1807
 
        SAHPI_IN  SaHpiSessionIdT     SessionId,
1808
 
        SAHPI_IN  SaHpiResourceIdT    ResourceId,
1809
 
        SAHPI_IN  SaHpiIdrIdT         IdrId,
1810
 
        SAHPI_IN  SaHpiIdrAreaTypeT   AreaType,
1811
 
        SAHPI_IN  SaHpiEntryIdT       AreaId,
1812
 
        SAHPI_OUT SaHpiEntryIdT       *NextAreaId,
1813
 
        SAHPI_OUT SaHpiIdrAreaHeaderT *Header)
1814
44 
{
1815
 
1816
44 
        SaHpiRptEntryT *res;
1817
44 
        SaErrorT rv = SA_OK;    /* Default to SA_OK */
1818
44 
        SaHpiDomainIdT did;
1819
44 
        struct oh_domain *d = NULL;
1820
44 
        struct oh_handler *h;
1821
 
        SaErrorT (*set_func)(void *, SaHpiResourceIdT, SaHpiIdrIdT, SaHpiIdrAreaTypeT,
1822
44 
                              SaHpiEntryIdT, SaHpiEntryIdT *,  SaHpiIdrAreaHeaderT *);
1823
 
1824
44 
        if ( ((AreaType < SAHPI_IDR_AREATYPE_INTERNAL_USE) ||
1825
 
             ((AreaType > SAHPI_IDR_AREATYPE_PRODUCT_INFO) &&
1826
 
             (AreaType != SAHPI_IDR_AREATYPE_UNSPECIFIED)  &&
1827
 
             (AreaType != SAHPI_IDR_AREATYPE_OEM)) ||
1828
 
             (AreaId == SAHPI_LAST_ENTRY)||
1829
 
             (NextAreaId == NULL) ||
1830
 
             (Header == NULL)))   {
1831
4 
                dbg("Invalid Parameters");
1832
4 
                return SA_ERR_HPI_INVALID_PARAMS;
1833
 
        }
1834
 
1835
40 
        OH_CHECK_INIT_STATE(SessionId);
1836
39 
        OH_GET_DID(SessionId, did);
1837
39 
        OH_GET_DOMAIN(did, d); /* Lock domain */
1838
39 
        OH_RESOURCE_GET(d, ResourceId, res);
1839
 
1840
 
        /* Interface and conformance checking */
1841
38 
        if(!(res->ResourceCapabilities & SAHPI_CAPABILITY_INVENTORY_DATA)) {
1842
0 
                dbg("Resource %d in Domain %d doesn't have inventory data",
1843
 
                    ResourceId,did);
1844
0 
                oh_release_domain(d); /* Unlock domain */
1845
0 
                return SA_ERR_HPI_CAPABILITY;
1846
 
        }
1847
 
1848
38 
        OH_HANDLER_GET(d, ResourceId, h);
1849
38 
        oh_release_domain(d); /* Unlock domain */
1850
 
1851
38 
        set_func = h->abi->get_idr_area_header;
1852
38 
        if (!set_func) {
1853
0 
                dbg("Plugin does not have this function in jump table.");
1854
0 
                return SA_ERR_HPI_INVALID_CMD;
1855
 
        }
1856
 
1857
 
1858
 
        /* Access Inventory Info from plugin */
1859
38 
        trace("Access IdrAreaHeader from plugin.");
1860
38 
        rv = set_func(h->hnd, ResourceId, IdrId, AreaType, AreaId, NextAreaId, Header);
1861
 
1862
38 
        return rv;
1863
 
}
1864
 
1865
 
SaErrorT SAHPI_API saHpiIdrAreaAdd(
1866
 
        SAHPI_IN  SaHpiSessionIdT   SessionId,
1867
 
        SAHPI_IN  SaHpiResourceIdT  ResourceId,
1868
 
        SAHPI_IN  SaHpiIdrIdT       IdrId,
1869
 
        SAHPI_IN  SaHpiIdrAreaTypeT AreaType,
1870
 
        SAHPI_OUT SaHpiEntryIdT     *AreaId)
1871
2 
{
1872
2 
        SaHpiRptEntryT *res;
1873
2 
        SaErrorT rv = SA_OK;    /* Default to SA_OK */
1874
2 
        SaHpiDomainIdT did;
1875
2 
        struct oh_domain *d = NULL;
1876
2 
        struct oh_handler *h;
1877
 
        SaErrorT (*set_func)(void *, SaHpiResourceIdT, SaHpiIdrIdT, SaHpiIdrAreaTypeT,
1878
2 
                                SaHpiEntryIdT *);
1879
 
1880
2 
        if ( ((AreaType < SAHPI_IDR_AREATYPE_INTERNAL_USE) ||
1881
 
             ((AreaType > SAHPI_IDR_AREATYPE_PRODUCT_INFO) &&
1882
 
             (AreaType != SAHPI_IDR_AREATYPE_UNSPECIFIED)  &&
1883
 
             (AreaType != SAHPI_IDR_AREATYPE_OEM)) ||
1884
 
             (AreaId == NULL)))   {
1885
0 
                dbg("Invalid Parameters");
1886
0 
                return SA_ERR_HPI_INVALID_PARAMS;
1887
 
        }
1888
 
1889
2 
        OH_CHECK_INIT_STATE(SessionId);
1890
2 
        OH_GET_DID(SessionId, did);
1891
2 
        OH_GET_DOMAIN(did, d); /* Lock domain */
1892
2 
        OH_RESOURCE_GET(d, ResourceId, res);
1893
 
1894
 
        /* Interface and conformance checking */
1895
2 
        if(!(res->ResourceCapabilities & SAHPI_CAPABILITY_INVENTORY_DATA)) {
1896
1 
                dbg("Resource %d in Domain %d doesn't have inventory data",
1897
 
                    ResourceId,did);
1898
1 
                oh_release_domain(d); /* Unlock domain */
1899
1 
                return SA_ERR_HPI_CAPABILITY;
1900
 
        }
1901
 
1902
1 
        OH_HANDLER_GET(d, ResourceId, h);
1903
1 
        oh_release_domain(d); /* Unlock domain */
1904
 
1905
1 
        set_func = h->abi->add_idr_area;
1906
1 
        if (!set_func) {
1907
0 
                dbg("Plugin does not have this function in jump table.");
1908
0 
                return SA_ERR_HPI_INVALID_CMD;
1909
 
        }
1910
 
1911
 
        /* Access Inventory Info from plugin */
1912
1 
        trace("Access IdrAreaAdd from plugin.");
1913
1 
        rv = set_func(h->hnd, ResourceId, IdrId, AreaType, AreaId);
1914
 
1915
1 
        return rv;
1916
 
}
1917
 
1918
 
SaErrorT SAHPI_API saHpiIdrAreaDelete(
1919
 
        SAHPI_IN SaHpiSessionIdT  SessionId,
1920
 
        SAHPI_IN SaHpiResourceIdT ResourceId,
1921
 
        SAHPI_IN SaHpiIdrIdT      IdrId,
1922
 
        SAHPI_IN SaHpiEntryIdT    AreaId)
1923
1 
{
1924
1 
        SaHpiRptEntryT *res;
1925
1 
        SaErrorT rv = SA_OK;    /* Default to SA_OK */
1926
1 
        SaHpiDomainIdT did;
1927
1 
        struct oh_domain *d = NULL;
1928
1 
        struct oh_handler *h;
1929
1 
        SaErrorT (*set_func)(void *, SaHpiResourceIdT, SaHpiIdrIdT, SaHpiEntryIdT );
1930
 
1931
1 
        if (AreaId == SAHPI_LAST_ENTRY)   {
1932
0 
                dbg("Invalid Parameters");
1933
0 
                return SA_ERR_HPI_INVALID_PARAMS;
1934
 
        }
1935
 
1936
1 
        OH_CHECK_INIT_STATE(SessionId);
1937
1 
        OH_GET_DID(SessionId, did);
1938
1 
        OH_GET_DOMAIN(did, d); /* Lock domain */
1939
1 
        OH_RESOURCE_GET(d, ResourceId, res);
1940
 
1941
 
        /* Interface and conformance checking */
1942
1 
        if(!(res->ResourceCapabilities & SAHPI_CAPABILITY_INVENTORY_DATA)) {
1943
1 
                dbg("Resource %d in Domain %d doesn't have inventory data",
1944
 
                    ResourceId,did);
1945
1 
                oh_release_domain(d); /* Unlock domain */
1946
1 
                return SA_ERR_HPI_CAPABILITY;
1947
 
        }
1948
 
1949
0 
        OH_HANDLER_GET(d, ResourceId, h);
1950
0 
        oh_release_domain(d); /* Unlock domain */
1951
 
1952
0 
        set_func = h->abi->del_idr_area;
1953
0 
        if (!set_func) {
1954
0 
                dbg("Plugin does not have this function in jump table.");
1955
0 
                return SA_ERR_HPI_INVALID_CMD;
1956
 
        }
1957
 
1958
 
        /* Access Inventory Info from plugin */
1959
0 
        trace("Access IdrAreaDelete from plugin.");
1960
0 
        rv = set_func(h->hnd, ResourceId, IdrId, AreaId);
1961
 
1962
0 
        return rv;
1963
 
}
1964
 
1965
 
SaErrorT SAHPI_API saHpiIdrFieldGet(
1966
 
        SAHPI_IN  SaHpiSessionIdT    SessionId,
1967
 
        SAHPI_IN  SaHpiResourceIdT   ResourceId,
1968
 
        SAHPI_IN  SaHpiIdrIdT        IdrId,
1969
 
        SAHPI_IN  SaHpiEntryIdT      AreaId,
1970
 
        SAHPI_IN  SaHpiIdrFieldTypeT FieldType,
1971
 
        SAHPI_IN  SaHpiEntryIdT      FieldId,
1972
 
        SAHPI_OUT SaHpiEntryIdT      *NextFieldId,
1973
 
        SAHPI_OUT SaHpiIdrFieldT     *Field)
1974
62 
{
1975
62 
        SaHpiRptEntryT *res;
1976
62 
        SaErrorT rv = SA_OK;    /* Default to SA_OK */
1977
62 
        SaHpiDomainIdT did;
1978
62 
        struct oh_domain *d = NULL;
1979
62 
        struct oh_handler *h;
1980
 
        SaErrorT (*set_func)(void *, SaHpiResourceIdT, SaHpiIdrIdT,
1981
 
                             SaHpiEntryIdT, SaHpiIdrFieldTypeT, SaHpiEntryIdT,
1982
62 
                             SaHpiEntryIdT *, SaHpiIdrFieldT * );
1983
 
1984
62 
        if ((((FieldType > SAHPI_IDR_FIELDTYPE_CUSTOM) &&
1985
 
             (FieldType != SAHPI_IDR_FIELDTYPE_UNSPECIFIED)) ||
1986
 
             (AreaId == SAHPI_LAST_ENTRY) ||
1987
 
             (FieldId == SAHPI_LAST_ENTRY) ||
1988
 
             (NextFieldId == NULL) ||
1989
 
             (Field == NULL)))    {
1990
10 
                dbg("Invalid Parameters");
1991
10 
                return SA_ERR_HPI_INVALID_PARAMS;
1992
 
        }
1993
 
1994
52 
        OH_CHECK_INIT_STATE(SessionId);
1995
50 
        OH_GET_DID(SessionId, did);
1996
50 
        OH_GET_DOMAIN(did, d); /* Lock domain */
1997
50 
        OH_RESOURCE_GET(d, ResourceId, res);
1998
 
1999
 
        /* Interface and conformance checking */
2000
48 
        if(!(res->ResourceCapabilities & SAHPI_CAPABILITY_INVENTORY_DATA)) {
2001
0 
                dbg("Resource %d in Domain %d doesn't have inventory data",
2002
 
                    ResourceId,did);
2003
0 
                oh_release_domain(d); /* Unlock domain */
2004
0 
                return SA_ERR_HPI_CAPABILITY;
2005
 
        }
2006
 
2007
48 
        OH_HANDLER_GET(d, ResourceId, h);
2008
48 
        oh_release_domain(d); /* Unlock domain */
2009
 
2010
48 
        set_func = h->abi->get_idr_field;
2011
48 
        if (!set_func) {
2012
0 
                dbg("Plugin does not have this function in jump table.");
2013
0 
                return SA_ERR_HPI_INVALID_CMD;
2014
 
        }
2015
 
2016
 
2017
 
        /* Access Inventory Info from plugin */
2018
48 
        trace("Access saHpiIdrFieldGet from plugin.");
2019
48 
        rv = set_func(h->hnd, ResourceId, IdrId, AreaId,
2020
 
                      FieldType, FieldId, NextFieldId, Field);
2021
 
2022
48 
        return rv;
2023
 
}
2024
 
2025
 
SaErrorT SAHPI_API saHpiIdrFieldAdd(
2026
 
        SAHPI_IN    SaHpiSessionIdT  SessionId,
2027
 
        SAHPI_IN    SaHpiResourceIdT ResourceId,
2028
 
        SAHPI_IN    SaHpiIdrIdT      IdrId,
2029
 
        SAHPI_INOUT SaHpiIdrFieldT   *Field)
2030
6 
{
2031
6 
        SaHpiRptEntryT *res;
2032
6 
        SaErrorT rv = SA_OK;    /* Default to SA_OK */
2033
6 
        SaHpiDomainIdT did;
2034
6 
        struct oh_domain *d = NULL;
2035
6 
        struct oh_handler *h;
2036
6 
        SaErrorT (*set_func)(void *, SaHpiResourceIdT, SaHpiIdrIdT,  SaHpiIdrFieldT * );
2037
 
2038
6 
        if (!Field)   {
2039
0 
                dbg("Invalid Parameter: Field is NULL ");
2040
0 
                return SA_ERR_HPI_INVALID_PARAMS;
2041
6 
        } else if (Field->Type > SAHPI_IDR_FIELDTYPE_CUSTOM) {
2042
0 
                dbg("Invalid Parameters in Field->Type");
2043
0 
                return SA_ERR_HPI_INVALID_PARAMS;
2044
 
        }
2045
 
2046
6 
        OH_CHECK_INIT_STATE(SessionId);
2047
6 
        OH_GET_DID(SessionId, did);
2048
6 
        OH_GET_DOMAIN(did, d); /* Lock domain */
2049
6 
        OH_RESOURCE_GET(d, ResourceId, res);
2050
 
2051
 
        /* Interface and conformance checking */
2052
6 
        if(!(res->ResourceCapabilities & SAHPI_CAPABILITY_INVENTORY_DATA)) {
2053
2 
                dbg("Resource %d in Domain %d doesn't have inventory data",
2054
 
                    ResourceId,did);
2055
2 
                oh_release_domain(d); /* Unlock domain */
2056
2 
                return SA_ERR_HPI_CAPABILITY;
2057
 
        }
2058
 
2059
4 
        OH_HANDLER_GET(d, ResourceId, h);
2060
4 
        oh_release_domain(d); /* Unlock domain */
2061
 
2062
4 
        set_func = h->abi->add_idr_field;
2063
4 
        if (!set_func) {
2064
0 
                dbg("Plugin does not have this function in jump table.");
2065
0 
                return SA_ERR_HPI_INVALID_CMD;
2066
 
        }
2067
 
2068
 
        /* Access Inventory Info from plugin */
2069
4 
        trace("Access saHpiIdrFieldAdd from plugin.");
2070
4 
        rv = set_func(h->hnd, ResourceId, IdrId, Field);
2071
 
2072
4 
        return rv;
2073
 
}
2074
 
2075
 
SaErrorT SAHPI_API saHpiIdrFieldSet(
2076
 
        SAHPI_IN SaHpiSessionIdT  SessionId,
2077
 
        SAHPI_IN SaHpiResourceIdT ResourceId,
2078
 
        SAHPI_IN SaHpiIdrIdT      IdrId,
2079
 
        SAHPI_IN SaHpiIdrFieldT   *Field)
2080
3 
{
2081
3 
        SaHpiRptEntryT *res;
2082
3 
        SaErrorT rv = SA_OK;    /* Default to SA_OK */
2083
3 
        SaHpiDomainIdT did;
2084
3 
        struct oh_domain *d = NULL;
2085
3 
        struct oh_handler *h;
2086
3 
        SaErrorT (*set_func)(void *, SaHpiResourceIdT, SaHpiIdrIdT, SaHpiIdrFieldT * );
2087
 
2088
3 
        if (!Field)   {
2089
0 
                dbg("Invalid Parameter: Field is NULL ");
2090
0 
                return SA_ERR_HPI_INVALID_PARAMS;
2091
3 
        } else if (Field->Type > SAHPI_IDR_FIELDTYPE_CUSTOM) {
2092
0 
                dbg("Invalid Parameters in Field->Type");
2093
0 
                return SA_ERR_HPI_INVALID_PARAMS;
2094
 
        }
2095
 
2096
3 
        OH_CHECK_INIT_STATE(SessionId);
2097
3 
        OH_GET_DID(SessionId, did);
2098
3 
        OH_GET_DOMAIN(did, d); /* Lock domain */
2099
3 
        OH_RESOURCE_GET(d, ResourceId, res);
2100
 
2101
 
        /* Interface and conformance checking */
2102
3 
        if(!(res->ResourceCapabilities & SAHPI_CAPABILITY_INVENTORY_DATA)) {
2103
2 
                dbg("Resource %d in Domain %d doesn't have inventory data",
2104
 
                    ResourceId,did);
2105
2 
                oh_release_domain(d); /* Unlock domain */
2106
2 
                return SA_ERR_HPI_CAPABILITY;
2107
 
        }
2108
 
2109
1 
        OH_HANDLER_GET(d, ResourceId, h);
2110
1 
        oh_release_domain(d); /* Unlock domain */
2111
 
2112
1 
        set_func = h->abi->set_idr_field;
2113
1 
        if (!set_func) {
2114
0 
                dbg("Plugin does not have this function in jump table.");
2115
0 
                return SA_ERR_HPI_INVALID_CMD;
2116
 
        }
2117
 
2118
 
        /* Access Inventory Info from plugin */
2119
1 
        trace("Access saHpiIdrFieldSet from plugin.");
2120
1 
        rv = set_func(h->hnd, ResourceId, IdrId, Field);
2121
 
2122
1 
        return rv;
2123
 
}
2124
 
2125
 
SaErrorT SAHPI_API saHpiIdrFieldDelete(
2126
 
        SAHPI_IN SaHpiSessionIdT  SessionId,
2127
 
        SAHPI_IN SaHpiResourceIdT ResourceId,
2128
 
        SAHPI_IN SaHpiIdrIdT      IdrId,
2129
 
        SAHPI_IN SaHpiEntryIdT    AreaId,
2130
 
        SAHPI_IN SaHpiEntryIdT    FieldId)
2131
3 
{
2132
3 
        SaHpiRptEntryT *res;
2133
3 
        SaErrorT rv = SA_OK;    /* Default to SA_OK */
2134
3 
        SaHpiDomainIdT did;
2135
3 
        struct oh_handler *h;
2136
3 
        struct oh_domain *d = NULL;
2137
3 
        SaErrorT (*set_func)(void *, SaHpiResourceIdT, SaHpiIdrIdT, SaHpiEntryIdT, SaHpiEntryIdT );
2138
 
2139
3 
        if (FieldId == SAHPI_LAST_ENTRY || AreaId == SAHPI_LAST_ENTRY)   {
2140
0 
                dbg("Invalid Parameters");
2141
0 
                return SA_ERR_HPI_INVALID_PARAMS;
2142
 
        }
2143
 
2144
3 
        OH_CHECK_INIT_STATE(SessionId);
2145
3 
        OH_GET_DID(SessionId, did);
2146
3 
        OH_GET_DOMAIN(did, d); /* Lock domain */
2147
3 
        OH_RESOURCE_GET(d, ResourceId, res);
2148
 
2149
 
        /* Interface and conformance checking */
2150
3 
        if(!(res->ResourceCapabilities & SAHPI_CAPABILITY_INVENTORY_DATA)) {
2151
2 
                dbg("Resource %d in Domain %d doesn't have inventory data",
2152
 
                    ResourceId,did);
2153
2 
                oh_release_domain(d); /* Unlock domain */
2154
2 
                return SA_ERR_HPI_CAPABILITY;
2155
 
        }
2156
 
2157
1 
        OH_HANDLER_GET(d, ResourceId, h);
2158
1 
        oh_release_domain(d); /* Unlock domain */
2159
 
2160
1 
        set_func = h->abi->del_idr_field;
2161
1 
        if (!set_func) {
2162
0 
                dbg("Plugin does not have this function in jump table.");
2163
0 
                return SA_ERR_HPI_INVALID_CMD;
2164
 
        }
2165
 
2166
 
        /* Access Inventory Info from plugin */
2167
1 
        trace("Access saHpiIdrFieldDelete from plugin.");
2168
1 
        rv = set_func(h->hnd, ResourceId, IdrId, AreaId, FieldId);
2169
 
2170
1 
        return rv;
2171
 
}
2172
 
2173
 
/* End of Inventory Functions  */
2174
 
2175
 
/*********************************************************************
2176
 
 *
2177
 
 *  Watchdog Functions
2178
 
 *
2179
 
 ********************************************************************/
2180
 
2181
 
SaErrorT SAHPI_API saHpiWatchdogTimerGet (
2182
 
        SAHPI_IN  SaHpiSessionIdT   SessionId,
2183
 
        SAHPI_IN  SaHpiResourceIdT  ResourceId,
2184
 
        SAHPI_IN  SaHpiWatchdogNumT WatchdogNum,
2185
 
        SAHPI_OUT SaHpiWatchdogT    *Watchdog)
2186
0 
{
2187
0 
        SaErrorT rv;
2188
0 
        SaErrorT (*get_func)(void *, SaHpiResourceIdT, SaHpiWatchdogNumT, SaHpiWatchdogT *);
2189
0 
        SaHpiRptEntryT *res;
2190
0 
        struct oh_handler *h;
2191
0 
        struct oh_domain *d = NULL;
2192
0 
        SaHpiDomainIdT did;
2193
 
2194
0 
        if (!Watchdog) return SA_ERR_HPI_INVALID_PARAMS;
2195
 
2196
0 
        OH_CHECK_INIT_STATE(SessionId);
2197
0 
        OH_GET_DID(SessionId, did);
2198
0 
        OH_GET_DOMAIN(did, d); /* Lock domain */
2199
0 
        OH_RESOURCE_GET(d, ResourceId, res);
2200
 
2201
0 
        if(!(res->ResourceCapabilities & SAHPI_CAPABILITY_WATCHDOG)) {
2202
0 
                dbg("Resource %d in Domain %d doesn't have watchdog",
2203
 
                    ResourceId,did);
2204
0 
                oh_release_domain(d); /* Unlock domain */
2205
0 
                return SA_ERR_HPI_CAPABILITY;
2206
 
        }
2207
 
2208
0 
        OH_HANDLER_GET(d, ResourceId, h);
2209
0 
        oh_release_domain(d); /* Unlock domain */
2210
 
2211
0 
        get_func = h->abi->get_watchdog_info;
2212
0 
        if (!get_func) {
2213
0 
                return SA_ERR_HPI_INVALID_CMD;
2214
 
        }
2215
 
2216
0 
        rv = get_func(h->hnd, ResourceId, WatchdogNum, Watchdog);
2217
 
2218
0 
        return rv;
2219
 
}
2220
 
2221
 
SaErrorT SAHPI_API saHpiWatchdogTimerSet (
2222
 
        SAHPI_IN SaHpiSessionIdT   SessionId,
2223
 
        SAHPI_IN SaHpiResourceIdT  ResourceId,
2224
 
        SAHPI_IN SaHpiWatchdogNumT WatchdogNum,
2225
 
        SAHPI_IN SaHpiWatchdogT    *Watchdog)
2226
0 
{
2227
0 
        SaErrorT rv;
2228
0 
        SaErrorT (*set_func)(void *, SaHpiResourceIdT, SaHpiWatchdogNumT, SaHpiWatchdogT *);
2229
0 
        SaHpiRptEntryT *res;
2230
0 
        struct oh_handler *h;
2231
0 
        struct oh_domain *d = NULL;
2232
0 
        SaHpiDomainIdT did;
2233
 
2234
0 
        if (!Watchdog ||
2235
 
            (Watchdog && (!oh_lookup_watchdogtimeruse(Watchdog->TimerUse) ||
2236
 
                          !oh_lookup_watchdogaction(Watchdog->TimerAction) ||
2237
 
                          !oh_lookup_watchdogpretimerinterrupt(Watchdog->PretimerInterrupt)))) {
2238
0 
                return SA_ERR_HPI_INVALID_PARAMS;
2239
 
        }
2240
 
2241
0 
        OH_CHECK_INIT_STATE(SessionId);
2242
0 
        OH_GET_DID(SessionId, did);
2243
0 
        OH_GET_DOMAIN(did, d); /* Lock domain */
2244
0 
        OH_RESOURCE_GET(d, ResourceId, res);
2245
 
2246
0 
        if(!(res->ResourceCapabilities & SAHPI_CAPABILITY_WATCHDOG)) {
2247
0 
                dbg("Resource %d in Domain %d doesn't have watchdog",
2248
 
                    ResourceId,did);
2249
0 
                oh_release_domain(d); /* Unlock domain */
2250
0 
                return SA_ERR_HPI_CAPABILITY;
2251
 
        }
2252
 
2253
0 
        OH_HANDLER_GET(d, ResourceId, h);
2254
0 
        oh_release_domain(d); /* Unlock domain */
2255
 
2256
0 
        set_func = h->abi->set_watchdog_info;
2257
0 
        if (!set_func) {
2258
0 
                return SA_ERR_HPI_INVALID_CMD;
2259
 
        }
2260
 
2261
0 
        rv = set_func(h->hnd, ResourceId, WatchdogNum, Watchdog);
2262
 
2263
0 
        return rv;
2264
 
}
2265
 
2266
 
SaErrorT SAHPI_API saHpiWatchdogTimerReset (
2267
 
        SAHPI_IN SaHpiSessionIdT   SessionId,
2268
 
        SAHPI_IN SaHpiResourceIdT  ResourceId,
2269
 
        SAHPI_IN SaHpiWatchdogNumT WatchdogNum)
2270
0 
{
2271
0 
        SaErrorT rv;
2272
0 
        SaErrorT (*reset_func)(void *, SaHpiResourceIdT, SaHpiWatchdogNumT);
2273
0 
        SaHpiRptEntryT *res;
2274
0 
        struct oh_handler *h;
2275
0 
        struct oh_domain *d = NULL;
2276
0 
        SaHpiDomainIdT did;
2277
 
2278
0 
        OH_CHECK_INIT_STATE(SessionId);
2279
0 
        OH_GET_DID(SessionId, did);
2280
0 
        OH_GET_DOMAIN(did, d); /* Lock domain */
2281
0 
        OH_RESOURCE_GET(d, ResourceId, res);
2282
 
2283
0 
        if(!(res->ResourceCapabilities & SAHPI_CAPABILITY_WATCHDOG)) {
2284
0 
                dbg("Resource %d in Domain %d doesn't have watchdog",
2285
 
                    ResourceId,did);
2286
0 
                oh_release_domain(d); /* Unlock domain */
2287
0 
                return SA_ERR_HPI_CAPABILITY;
2288
 
        }
2289
 
2290
0 
        OH_HANDLER_GET(d, ResourceId, h);
2291
0 
        oh_release_domain(d); /* Unlock domain */
2292
 
2293
0 
        reset_func = h->abi->reset_watchdog;
2294
0 
        if (!reset_func) {
2295
0 
                return SA_ERR_HPI_INVALID_CMD;
2296
 
        }
2297
 
2298
0 
        rv = reset_func(h->hnd, ResourceId, WatchdogNum);
2299
 
2300
0 
        return rv;
2301
 
}
2302
 
2303
 
/*******************************************************************************
2304
 
 *
2305
 
 *  Annunciator Functions
2306
 
 *
2307
 
 ******************************************************************************/
2308
 
2309
 
SaErrorT SAHPI_API saHpiAnnunciatorGetNext(
2310
 
        SAHPI_IN SaHpiSessionIdT            SessionId,
2311
 
        SAHPI_IN SaHpiResourceIdT           ResourceId,
2312
 
        SAHPI_IN SaHpiAnnunciatorNumT       AnnunciatorNum,
2313
 
        SAHPI_IN SaHpiSeverityT             Severity,
2314
 
        SAHPI_IN SaHpiBoolT                 UnacknowledgedOnly,
2315
 
        SAHPI_INOUT SaHpiAnnouncementT      *Announcement)
2316
0 
{
2317
0 
        return SA_ERR_HPI_UNSUPPORTED_API;
2318
 
}
2319
 
2320
 
SaErrorT SAHPI_API saHpiAnnunciatorGet(
2321
 
        SAHPI_IN SaHpiSessionIdT            SessionId,
2322
 
        SAHPI_IN SaHpiResourceIdT           ResourceId,
2323
 
        SAHPI_IN SaHpiAnnunciatorNumT       AnnunciatorNum,
2324
 
        SAHPI_IN SaHpiEntryIdT              EntryId,
2325
 
        SAHPI_OUT SaHpiAnnouncementT        *Announcement)
2326
0 
{
2327
0 
        return SA_ERR_HPI_UNSUPPORTED_API;
2328
 
}
2329
 
2330
 
SaErrorT SAHPI_API saHpiAnnunciatorAcknowledge(
2331
 
        SAHPI_IN SaHpiSessionIdT            SessionId,
2332
 
        SAHPI_IN SaHpiResourceIdT           ResourceId,
2333
 
        SAHPI_IN SaHpiAnnunciatorNumT       AnnunciatorNum,
2334
 
        SAHPI_IN SaHpiEntryIdT              EntryId,
2335
 
        SAHPI_IN SaHpiSeverityT             Severity)
2336
0 
{
2337
0 
        return SA_ERR_HPI_UNSUPPORTED_API;
2338
 
}
2339
 
2340
 
SaErrorT SAHPI_API saHpiAnnunciatorAdd(
2341
 
        SAHPI_IN SaHpiSessionIdT            SessionId,
2342
 
        SAHPI_IN SaHpiResourceIdT           ResourceId,
2343
 
        SAHPI_IN SaHpiAnnunciatorNumT       AnnunciatorNum,
2344
 
        SAHPI_INOUT SaHpiAnnouncementT      *Announcement)
2345
0 
{
2346
0 
        return SA_ERR_HPI_UNSUPPORTED_API;
2347
 
}
2348
 
2349
 
SaErrorT SAHPI_API saHpiAnnunciatorDelete(
2350
 
        SAHPI_IN SaHpiSessionIdT            SessionId,
2351
 
        SAHPI_IN SaHpiResourceIdT           ResourceId,
2352
 
        SAHPI_IN SaHpiAnnunciatorNumT       AnnunciatorNum,
2353
 
        SAHPI_IN SaHpiEntryIdT              EntryId,
2354
 
        SAHPI_IN SaHpiSeverityT             Severity)
2355
0 
{
2356
0 
        return SA_ERR_HPI_UNSUPPORTED_API;
2357
 
}
2358
 
2359
 
SaErrorT SAHPI_API saHpiAnnunciatorModeGet(
2360
 
        SAHPI_IN SaHpiSessionIdT            SessionId,
2361
 
        SAHPI_IN SaHpiResourceIdT           ResourceId,
2362
 
        SAHPI_IN SaHpiAnnunciatorNumT       AnnunciatorNum,
2363
 
        SAHPI_OUT SaHpiAnnunciatorModeT     *Mode)
2364
0 
{
2365
0 
        return SA_ERR_HPI_UNSUPPORTED_API;
2366
 
}
2367
 
2368
 
SaErrorT SAHPI_API saHpiAnnunciatorModeSet(
2369
 
        SAHPI_IN SaHpiSessionIdT            SessionId,
2370
 
        SAHPI_IN SaHpiResourceIdT           ResourceId,
2371
 
        SAHPI_IN SaHpiAnnunciatorNumT       AnnunciatorNum,
2372
 
        SAHPI_IN SaHpiAnnunciatorModeT      Mode)
2373
0 
{
2374
0 
        return SA_ERR_HPI_UNSUPPORTED_API;
2375
 
}
2376
 
2377
 
/*******************************************************************************
2378
 
 *
2379
 
 *  Hotswap Functions
2380
 
 *
2381
 
 ******************************************************************************/
2382
 
2383
 
SaErrorT SAHPI_API saHpiHotSwapPolicyCancel (
2384
 
        SAHPI_IN SaHpiSessionIdT  SessionId,
2385
 
        SAHPI_IN SaHpiResourceIdT ResourceId)
2386
0 
{
2387
0 
        return SA_ERR_HPI_UNSUPPORTED_API;
2388
 
}
2389
 
2390
 
SaErrorT SAHPI_API saHpiResourceActiveSet (
2391
 
        SAHPI_IN SaHpiSessionIdT  SessionId,
2392
 
        SAHPI_IN SaHpiResourceIdT ResourceId)
2393
3 
{
2394
3 
        SaErrorT rv;
2395
 
        SaErrorT (*set_hotswap_state)(void *hnd, SaHpiResourceIdT,
2396
3 
                                      SaHpiHsStateT state);
2397
 
2398
3 
        SaHpiRptEntryT *res;
2399
3 
        struct oh_handler *h;
2400
3 
        SaHpiDomainIdT did;
2401
3 
        struct oh_domain *d = NULL;
2402
3 
        struct oh_resource_data *rd;
2403
 
2404
3 
        OH_CHECK_INIT_STATE(SessionId);
2405
2 
        OH_GET_DID(SessionId, did);
2406
2 
        OH_GET_DOMAIN(did, d); /* Lock domain */
2407
2 
        OH_RESOURCE_GET(d, ResourceId, res);
2408
 
2409
1 
        if (!(res->ResourceCapabilities & SAHPI_CAPABILITY_MANAGED_HOTSWAP)) {
2410
0 
                oh_release_domain(d); /* Unlock domain */
2411
0 
                return SA_ERR_HPI_CAPABILITY;
2412
 
        }
2413
 
2414
1 
        rd = oh_get_resource_data(&(d->rpt), ResourceId);
2415
1 
        if (!rd) {
2416
0 
                dbg( "Can't find resource data for Resource %d in Domain %d",ResourceId,did);
2417
0 
                oh_release_domain(d); /* Unlock domain */
2418
0 
                return SA_ERR_HPI_INVALID_PARAMS;
2419
 
        }
2420
 
2421
1 
        if (!rd->controlled) {
2422
1 
                oh_release_domain(d); /* Unlock domain */
2423
1 
                return SA_ERR_HPI_INVALID_CMD;
2424
 
        }
2425
 
2426
 
        /* this was done in the old code, so we do it here */
2427
0 
        rd->controlled = 0;
2428
 
2429
0 
        OH_HANDLER_GET(d, ResourceId, h);
2430
0 
        oh_release_domain(d); /* Unlock domain */
2431
 
2432
0 
        set_hotswap_state = h->abi->set_hotswap_state;
2433
0 
        if (!set_hotswap_state) {
2434
0 
                return SA_ERR_HPI_INVALID_CMD;
2435
 
        }
2436
 
2437
0 
        rv = set_hotswap_state(h->hnd, ResourceId, SAHPI_HS_STATE_ACTIVE);
2438
 
2439
 
2440
0 
        return rv;
2441
 
}
2442
 
2443
 
SaErrorT SAHPI_API saHpiResourceInactiveSet (
2444
 
        SAHPI_IN SaHpiSessionIdT  SessionId,
2445
 
        SAHPI_IN SaHpiResourceIdT ResourceId)
2446
3 
{
2447
3 
        SaErrorT rv;
2448
 
        SaErrorT (*set_hotswap_state)(void *hnd, SaHpiResourceIdT rid,
2449
3 
                                      SaHpiHsStateT state);
2450
3 
        SaHpiRptEntryT *res;
2451
3 
        struct oh_handler *h;
2452
3 
        SaHpiDomainIdT did;
2453
3 
        struct oh_domain *d = NULL;
2454
3 
        struct oh_resource_data *rd;
2455
 
2456
3 
        OH_CHECK_INIT_STATE(SessionId);
2457
2 
        OH_GET_DID(SessionId, did);
2458
2 
        OH_GET_DOMAIN(did, d); /* Lock domain */
2459
2 
        OH_RESOURCE_GET(d, ResourceId, res);
2460
 
2461
1 
        if (!(res->ResourceCapabilities & SAHPI_CAPABILITY_MANAGED_HOTSWAP)) {
2462
0 
                oh_release_domain(d); /* Unlock domain */
2463
0 
                return SA_ERR_HPI_CAPABILITY;
2464
 
        }
2465
 
2466
1 
        rd = oh_get_resource_data(&(d->rpt), ResourceId);
2467
1 
        if (!rd) {
2468
0 
                dbg("Can't find resource data for Resource %d in Domain %d",ResourceId,did);
2469
0 
                oh_release_domain(d); /* Unlock domain */
2470
0 
                return SA_ERR_HPI_INVALID_PARAMS;
2471
 
        }
2472
 
2473
1 
        if (!rd->controlled) {
2474
1 
                oh_release_domain(d); /* Unlock domain */
2475
1 
                return SA_ERR_HPI_INVALID_CMD;
2476
 
        }
2477
 
2478
0 
        rd->controlled = 0;
2479
 
2480
0 
        OH_HANDLER_GET(d, ResourceId, h);
2481
0 
        oh_release_domain(d); /* Unlock domain */
2482
 
2483
0 
        set_hotswap_state = h->abi->set_hotswap_state;
2484
0 
        if (!set_hotswap_state) {
2485
0 
                return SA_ERR_HPI_INVALID_CMD;
2486
 
        }
2487
 
2488
0 
        rv = set_hotswap_state(h->hnd, ResourceId, SAHPI_HS_STATE_INACTIVE);
2489
 
2490
0 
        return rv;
2491
 
}
2492
 
2493
 
SaErrorT SAHPI_API saHpiAutoInsertTimeoutGet(
2494
 
        SAHPI_IN  SaHpiSessionIdT SessionId,
2495
 
        SAHPI_OUT SaHpiTimeoutT   *Timeout)
2496
8 
{
2497
 
2498
8 
        SaHpiDomainIdT did;
2499
 
2500
8 
        if (!Timeout) {
2501
1 
                return SA_ERR_HPI_INVALID_PARAMS;
2502
 
        }
2503
 
2504
7 
        OH_CHECK_INIT_STATE(SessionId);
2505
6 
        OH_GET_DID(SessionId, did);
2506
 
2507
6 
        *Timeout = get_hotswap_auto_insert_timeout();
2508
 
2509
6 
        return SA_OK;
2510
 
}
2511
 
2512
 
SaErrorT SAHPI_API saHpiAutoInsertTimeoutSet(
2513
 
        SAHPI_IN SaHpiSessionIdT SessionId,
2514
 
        SAHPI_IN SaHpiTimeoutT   Timeout)
2515
7 
{
2516
7 
        SaHpiDomainIdT did;
2517
 
2518
7 
        if (Timeout != SAHPI_TIMEOUT_IMMEDIATE &&
2519
 
            Timeout != SAHPI_TIMEOUT_BLOCK &&
2520
 
            Timeout < 0)
2521
0 
                return SA_ERR_HPI_INVALID_PARAMS;
2522
 
2523
7 
        OH_CHECK_INIT_STATE(SessionId);
2524
6 
        OH_GET_DID(SessionId, did);
2525
 
2526
6 
        set_hotswap_auto_insert_timeout(Timeout);
2527
 
2528
6 
        return SA_OK;
2529
 
}
2530
 
2531
 
SaErrorT SAHPI_API saHpiAutoExtractTimeoutGet(
2532
 
        SAHPI_IN  SaHpiSessionIdT  SessionId,
2533
 
        SAHPI_IN  SaHpiResourceIdT ResourceId,
2534
 
        SAHPI_OUT SaHpiTimeoutT    *Timeout)
2535
9 
{
2536
9 
        SaHpiRptEntryT *res;
2537
9 
        struct oh_resource_data *rd;
2538
9 
        SaHpiDomainIdT did;
2539
9 
        struct oh_domain *d = NULL;
2540
 
2541
9 
        if (!Timeout) {
2542
1 
                return SA_ERR_HPI_INVALID_PARAMS;
2543
 
        }
2544
 
2545
8 
        OH_CHECK_INIT_STATE(SessionId);
2546
7 
        OH_GET_DID(SessionId, did);
2547
7 
        OH_GET_DOMAIN(did, d); /* Lock domain */
2548
7 
        OH_RESOURCE_GET(d, ResourceId, res);
2549
 
2550
6 
        if (!(res->ResourceCapabilities & SAHPI_CAPABILITY_MANAGED_HOTSWAP)) {
2551
0 
                oh_release_domain(d); /* Unlock domain */
2552
0 
                return SA_ERR_HPI_CAPABILITY;
2553
 
        }
2554
 
2555
6 
        rd = oh_get_resource_data(&(d->rpt), ResourceId);
2556
6 
        if (!rd) {
2557
0 
                dbg("Cannot find resource data for Resource %d in Domain %d",ResourceId,did);
2558
0 
                oh_release_domain(d); /* Unlock domain */
2559
0 
                return SA_ERR_HPI_INVALID_PARAMS;
2560
 
        }
2561
 
2562
6 
        *Timeout = rd->auto_extract_timeout;
2563
6 
        oh_release_domain(d); /* Unlock domain */
2564
 
2565
6 
        return SA_OK;
2566
 
}
2567
 
2568
 
SaErrorT SAHPI_API saHpiAutoExtractTimeoutSet(
2569
 
        SAHPI_IN SaHpiSessionIdT  SessionId,
2570
 
        SAHPI_IN SaHpiResourceIdT ResourceId,
2571
 
        SAHPI_IN SaHpiTimeoutT    Timeout)
2572
8 
{
2573
8 
        SaHpiRptEntryT *res;
2574
8 
        struct oh_resource_data *rd;
2575
8 
        SaHpiDomainIdT did;
2576
8 
        struct oh_domain *d = NULL;
2577
 
2578
8 
        if (Timeout != SAHPI_TIMEOUT_IMMEDIATE &&
2579
 
            Timeout != SAHPI_TIMEOUT_BLOCK &&
2580
 
            Timeout < 0)
2581
0 
                return SA_ERR_HPI_INVALID_PARAMS;
2582
 
2583
8 
        OH_CHECK_INIT_STATE(SessionId);
2584
7 
        OH_GET_DID(SessionId, did);
2585
7 
        OH_GET_DOMAIN(did, d); /* Lock domain */
2586
7 
        OH_RESOURCE_GET(d, ResourceId, res);
2587
 
2588
6 
        if (!(res->ResourceCapabilities & SAHPI_CAPABILITY_MANAGED_HOTSWAP)) {
2589
0 
                oh_release_domain(d); /* Unlock domain */
2590
0 
                return SA_ERR_HPI_CAPABILITY;
2591
 
        }
2592
 
2593
6 
        rd = oh_get_resource_data(&(d->rpt), ResourceId);
2594
6 
        if (!rd) {
2595
0 
                dbg("Cannot find resource data for Resource %d in Domain %d",ResourceId,did);
2596
0 
                oh_release_domain(d); /* Unlock domain */
2597
0 
                return SA_ERR_HPI_INVALID_PARAMS;
2598
 
        }
2599
 
2600
6 
        rd->auto_extract_timeout = Timeout;
2601
6 
        oh_release_domain(d); /* Unlock domain */
2602
 
2603
6 
        return SA_OK;
2604
 
}
2605
 
2606
 
SaErrorT SAHPI_API saHpiHotSwapStateGet (
2607
 
        SAHPI_IN  SaHpiSessionIdT  SessionId,
2608
 
        SAHPI_IN  SaHpiResourceIdT ResourceId,
2609
 
        SAHPI_OUT SaHpiHsStateT    *State)
2610
12 
{
2611
12 
        SaErrorT rv;
2612
 
        SaErrorT (*get_hotswap_state)(void *hnd, SaHpiResourceIdT rid,
2613
12 
                                      SaHpiHsStateT *state);
2614
12 
        SaHpiRptEntryT *res;
2615
12 
        struct oh_handler *h;
2616
12 
        SaHpiDomainIdT did;
2617
12 
        struct oh_domain *d = NULL;
2618
 
2619
12 
        if (!State) {
2620
1 
                return SA_ERR_HPI_INVALID_PARAMS;
2621
 
        }
2622
 
2623
11 
        OH_CHECK_INIT_STATE(SessionId);
2624
10 
        OH_GET_DID(SessionId, did);
2625
10 
        OH_GET_DOMAIN(did, d); /* Lock domain */
2626
10 
        OH_RESOURCE_GET(d, ResourceId, res);
2627
 
2628
9 
        if (!(res->ResourceCapabilities & SAHPI_CAPABILITY_FRU)) {
2629
0 
                oh_release_domain(d); /* Unlock domain */
2630
0 
                return SA_ERR_HPI_CAPABILITY;
2631
 
        }
2632
 
2633
9 
        OH_HANDLER_GET(d, ResourceId, h);
2634
9 
        oh_release_domain(d); /* Unlock domain */
2635
 
2636
9 
        get_hotswap_state = h->abi->get_hotswap_state;
2637
9 
        if (!get_hotswap_state) {
2638
0 
                return SA_ERR_HPI_INVALID_CMD;
2639
 
        }
2640
 
2641
9 
        rv = get_hotswap_state(h->hnd, ResourceId, State);
2642
 
2643
9 
        return rv;
2644
 
}
2645
 
2646
 
SaErrorT SAHPI_API saHpiHotSwapActionRequest (
2647
 
        SAHPI_IN SaHpiSessionIdT  SessionId,
2648
 
        SAHPI_IN SaHpiResourceIdT ResourceId,
2649
 
        SAHPI_IN SaHpiHsActionT   Action)
2650
13 
{
2651
13 
        SaErrorT rv;
2652
 
        SaErrorT (*request_hotswap_action)(void *hnd, SaHpiResourceIdT rid,
2653
13 
                                           SaHpiHsActionT act);
2654
 
2655
13 
        SaHpiRptEntryT *res;
2656
13 
        struct oh_handler *h;
2657
13 
        SaHpiDomainIdT did;
2658
13 
        struct oh_domain *d = NULL;
2659
 
2660
13 
        if (!oh_lookup_hsaction(Action)) {
2661
1 
                return SA_ERR_HPI_INVALID_PARAMS;
2662
 
        }
2663
 
2664
12 
        OH_CHECK_INIT_STATE(SessionId);
2665
11 
        OH_GET_DID(SessionId, did);
2666
11 
        OH_GET_DOMAIN(did, d); /* Lock domain */
2667
11 
        OH_RESOURCE_GET(d, ResourceId, res);
2668
 
2669
10 
        if (!(res->ResourceCapabilities & SAHPI_CAPABILITY_MANAGED_HOTSWAP)) {
2670
0 
                oh_release_domain(d); /* Unlock domain */
2671
0 
                return SA_ERR_HPI_CAPABILITY;
2672
 
        }
2673
 
2674
10 
        OH_HANDLER_GET(d, ResourceId, h);
2675
10 
        oh_release_domain(d); /* Unlock domain */
2676
 
2677
10 
        request_hotswap_action = h->abi->request_hotswap_action;
2678
10 
        if (!request_hotswap_action) {
2679
0 
                return SA_ERR_HPI_INVALID_CMD;
2680
 
        }
2681
 
2682
10 
        rv = request_hotswap_action(h->hnd, ResourceId, Action);
2683
 
2684
10 
        oh_get_events();
2685
 
2686
10 
        return rv;
2687
 
}
2688
 
2689
 
SaErrorT SAHPI_API saHpiHotSwapIndicatorStateGet (
2690
 
        SAHPI_IN  SaHpiSessionIdT        SessionId,
2691
 
        SAHPI_IN  SaHpiResourceIdT       ResourceId,
2692
 
        SAHPI_OUT SaHpiHsIndicatorStateT *State)
2693
7 
{
2694
7 
        SaErrorT rv;
2695
 
        SaErrorT (*get_indicator_state)(void *hnd, SaHpiResourceIdT id,
2696
7 
                                        SaHpiHsIndicatorStateT *state);
2697
7 
        SaHpiRptEntryT *res;
2698
7 
        struct oh_handler *h;
2699
7 
        SaHpiDomainIdT did;
2700
7 
        struct oh_domain *d = NULL;
2701
 
2702
7 
        if (!State) {
2703
1 
                return SA_ERR_HPI_INVALID_PARAMS;
2704
 
        }
2705
 
2706
6 
        OH_CHECK_INIT_STATE(SessionId);
2707
5 
        OH_GET_DID(SessionId, did);
2708
5 
        OH_GET_DOMAIN(did, d); /* Lock domain */
2709
5 
        OH_RESOURCE_GET(d, ResourceId, res);
2710
 
2711
4 
        if (!(res->ResourceCapabilities & SAHPI_CAPABILITY_MANAGED_HOTSWAP)) {
2712
0 
                oh_release_domain(d); /* Unlock domain */
2713
0 
                return SA_ERR_HPI_CAPABILITY;
2714
 
        }
2715
 
2716
4 
        OH_HANDLER_GET(d, ResourceId, h);
2717
4 
        oh_release_domain(d); /* Unlock domain */
2718
 
2719
4 
        get_indicator_state = h->abi->get_indicator_state;
2720
4 
        if (!get_indicator_state) {
2721
0 
                return SA_ERR_HPI_INVALID_CMD;
2722
 
        }
2723
 
2724
4 
        rv = get_indicator_state(h->hnd, ResourceId, State);
2725
 
2726
4 
        return rv;
2727
 
}
2728
 
2729
 
SaErrorT SAHPI_API saHpiHotSwapIndicatorStateSet (
2730
 
        SAHPI_IN SaHpiSessionIdT        SessionId,
2731
 
        SAHPI_IN SaHpiResourceIdT       ResourceId,
2732
 
        SAHPI_IN SaHpiHsIndicatorStateT State)
2733
7 
{
2734
7 
        SaErrorT rv;
2735
 
        SaErrorT (*set_indicator_state)(void *hnd, SaHpiResourceIdT id,
2736
7 
                                        SaHpiHsIndicatorStateT state);
2737
7 
        SaHpiRptEntryT *res;
2738
7 
        struct oh_handler *h;
2739
7 
        SaHpiDomainIdT did;
2740
7 
        struct oh_domain *d = NULL;
2741
 
2742
7 
        if (!oh_lookup_hsindicatorstate(State)) {
2743
1 
                return SA_ERR_HPI_INVALID_PARAMS;
2744
 
        }
2745
 
2746
6 
        OH_CHECK_INIT_STATE(SessionId);
2747
5 
        OH_GET_DID(SessionId, did);
2748
5 
        OH_GET_DOMAIN(did, d); /* Lock domain */
2749
5 
        OH_RESOURCE_GET(d, ResourceId, res);
2750
 
2751
4 
        if (!(res->ResourceCapabilities & SAHPI_CAPABILITY_MANAGED_HOTSWAP)) {
2752
0 
                oh_release_domain(d); /* Unlock domain */
2753
0 
                return SA_ERR_HPI_CAPABILITY;
2754
 
        }
2755
 
2756
4 
        OH_HANDLER_GET(d, ResourceId, h);
2757
4 
        oh_release_domain(d); /* Unlock domain */
2758
 
2759
4 
        set_indicator_state = h->abi->set_indicator_state;
2760
4 
        if (!set_indicator_state) {
2761
0 
                return SA_ERR_HPI_INVALID_CMD;
2762
 
        }
2763
 
2764
4 
        rv = set_indicator_state(h->hnd, ResourceId, State);
2765
 
2766
4 
        return rv;
2767
 
}
2768
 
2769
 
/*******************************************************************************
2770
 
 *
2771
 
 *  Configuration Function(s)
2772
 
 *
2773
 
 ******************************************************************************/
2774
 
2775
 
SaErrorT SAHPI_API saHpiParmControl (
2776
 
        SAHPI_IN SaHpiSessionIdT  SessionId,
2777
 
        SAHPI_IN SaHpiResourceIdT ResourceId,
2778
 
        SAHPI_IN SaHpiParmActionT Action)
2779
6 
{
2780
6 
        SaErrorT rv;
2781
6 
        SaErrorT (*control_parm)(void *, SaHpiResourceIdT, SaHpiParmActionT);
2782
6 
        SaHpiRptEntryT *res;
2783
6 
        struct oh_handler *h;
2784
6 
        SaHpiDomainIdT did;
2785
6 
        struct oh_domain *d = NULL;
2786
 
2787
6 
        if (!oh_lookup_parmaction(Action)) {
2788
1 
                return SA_ERR_HPI_INVALID_PARAMS;
2789
 
        }
2790
 
2791
5 
        OH_CHECK_INIT_STATE(SessionId);
2792
4 
        OH_GET_DID(SessionId, did);
2793
4 
        OH_GET_DOMAIN(did, d); /* Lock domain */
2794
4 
        OH_RESOURCE_GET(d, ResourceId, res);
2795
 
2796
3 
        if (!(res->ResourceCapabilities & SAHPI_CAPABILITY_CONFIGURATION)) {
2797
0 
                oh_release_domain(d); /* Unlock domain */
2798
0 
                return SA_ERR_HPI_CAPABILITY;
2799
 
        }
2800
 
2801
3 
        OH_HANDLER_GET(d, ResourceId, h);
2802
3 
        oh_release_domain(d); /* Unlock domain */
2803
 
2804
3 
        control_parm = h->abi->control_parm;
2805
3 
        if (!control_parm) {
2806
0 
                return SA_ERR_HPI_INVALID_CMD;
2807
 
        }
2808
 
2809
3 
        rv = control_parm(h->hnd, ResourceId, Action);
2810
 
2811
3 
        return rv;
2812
 
}
2813
 
2814
 
/*******************************************************************************
2815
 
 *
2816
 
 *  Reset Functions
2817
 
 *
2818
 
 ******************************************************************************/
2819
 
2820
 
2821
 
SaErrorT SAHPI_API saHpiResourceResetStateGet (
2822
 
        SAHPI_IN  SaHpiSessionIdT   SessionId,
2823
 
        SAHPI_IN  SaHpiResourceIdT  ResourceId,
2824
 
        SAHPI_OUT SaHpiResetActionT *ResetAction)
2825
3 
{
2826
3 
        SaErrorT rv;
2827
3 
        SaErrorT (*get_func)(void *, SaHpiResourceIdT, SaHpiResetActionT *);
2828
 
2829
3 
        SaHpiRptEntryT *res;
2830
3 
        struct oh_handler *h;
2831
3 
        SaHpiDomainIdT did;
2832
3 
        struct oh_domain *d = NULL;
2833
 
2834
3 
        if (!ResetAction) {
2835
1 
                return SA_ERR_HPI_INVALID_PARAMS;
2836
 
        }
2837
 
2838
2 
        OH_CHECK_INIT_STATE(SessionId);
2839
1 
        OH_GET_DID(SessionId, did);
2840
1 
        OH_GET_DOMAIN(did, d); /* Lock domain */
2841
1 
        OH_RESOURCE_GET(d, ResourceId, res);
2842
 
2843
0 
        if (!(res->ResourceCapabilities & SAHPI_CAPABILITY_RESET)) {
2844
0 
                oh_release_domain(d); /* Unlock domain */
2845
0 
                return SA_ERR_HPI_CAPABILITY;
2846
 
        }
2847
 
2848
0 
        OH_HANDLER_GET(d, ResourceId, h);
2849
0 
        oh_release_domain(d); /* Unlock domain */
2850
 
2851
0 
        get_func = h->abi->get_reset_state;
2852
0 
        if (!get_func) {
2853
0 
                return SA_ERR_HPI_INVALID_CMD;
2854
 
        }
2855
 
2856
0 
        rv = get_func(h->hnd, ResourceId, ResetAction);
2857
 
2858
0 
        return rv;
2859
 
}
2860
 
2861
 
SaErrorT SAHPI_API saHpiResourceResetStateSet (
2862
 
        SAHPI_IN SaHpiSessionIdT   SessionId,
2863
 
        SAHPI_IN SaHpiResourceIdT  ResourceId,
2864
 
        SAHPI_IN SaHpiResetActionT ResetAction)
2865
4 
{
2866
4 
        SaErrorT rv;
2867
4 
        SaErrorT (*set_func)(void *, SaHpiResourceIdT, SaHpiResetActionT);
2868
4 
        SaHpiRptEntryT *res;
2869
4 
        struct oh_handler *h;
2870
4 
        SaHpiDomainIdT did;
2871
4 
        struct oh_domain *d = NULL;
2872
 
2873
4 
        if (!oh_lookup_resetaction(ResetAction)) {
2874
1 
                return SA_ERR_HPI_INVALID_PARAMS;
2875
 
        }
2876
 
2877
3 
        OH_CHECK_INIT_STATE(SessionId);
2878
2 
        OH_GET_DID(SessionId, did);
2879
2 
        OH_GET_DOMAIN(did, d); /* Lock domain */
2880
2 
        OH_RESOURCE_GET(d, ResourceId, res);
2881
 
2882
1 
        if (!(res->ResourceCapabilities & SAHPI_CAPABILITY_RESET)) {
2883
1 
                oh_release_domain(d); /* Unlock domain */
2884
1 
                return SA_ERR_HPI_CAPABILITY;
2885
 
        }
2886
 
2887
0 
        OH_HANDLER_GET(d, ResourceId, h);
2888
0 
        oh_release_domain(d); /* Unlock domain */
2889
 
2890
0 
        set_func = h->abi->set_reset_state;
2891
0 
        if (!set_func) {
2892
0 
                return SA_ERR_HPI_INVALID_CMD;
2893
 
        }
2894
 
2895
0 
        rv = set_func(h->hnd, ResourceId, ResetAction);
2896
 
2897
0 
        return rv;
2898
 
}
2899
 
2900
 
/*******************************************************************************
2901
 
 *
2902
 
 *  Power Functions
2903
 
 *
2904
 
 ******************************************************************************/
2905
 
2906
 
SaErrorT SAHPI_API saHpiResourcePowerStateGet (
2907
 
        SAHPI_IN  SaHpiSessionIdT  SessionId,
2908
 
        SAHPI_IN  SaHpiResourceIdT ResourceId,
2909
 
        SAHPI_OUT SaHpiPowerStateT *State)
2910
9 
{
2911
9 
        SaErrorT rv;
2912
 
        SaErrorT (*get_power_state)(void *hnd, SaHpiResourceIdT id,
2913
9 
                                    SaHpiPowerStateT *state);
2914
9 
        SaHpiRptEntryT *res;
2915
9 
        struct oh_handler *h;
2916
9 
        SaHpiDomainIdT did;
2917
9 
        struct oh_domain *d = NULL;
2918
 
2919
9 
        if (!State) {
2920
1 
                return SA_ERR_HPI_INVALID_PARAMS;
2921
 
        }
2922
 
2923
8 
        OH_CHECK_INIT_STATE(SessionId);
2924
7 
        OH_GET_DID(SessionId, did);
2925
7 
        OH_GET_DOMAIN(did, d); /* Lock domain */
2926
7 
        OH_RESOURCE_GET(d, ResourceId, res);
2927
 
2928
6 
        if (!(res->ResourceCapabilities & SAHPI_CAPABILITY_POWER)) {
2929
0 
                oh_release_domain(d); /* Unlock domain */
2930
0 
                return SA_ERR_HPI_CAPABILITY;
2931
 
        }
2932
 
2933
6 
        OH_HANDLER_GET(d, ResourceId, h);
2934
6 
        oh_release_domain(d); /* Unlock domain */
2935
 
2936
6 
        get_power_state = h->abi->get_power_state;
2937
6 
        if (!get_power_state) {
2938
0 
                return SA_ERR_HPI_INVALID_CMD;
2939
 
        }
2940
 
2941
6 
        rv = get_power_state(h->hnd, ResourceId, State);
2942
 
2943
6 
        return rv;
2944
 
}
2945
 
2946
 
SaErrorT SAHPI_API saHpiResourcePowerStateSet (
2947
 
        SAHPI_IN SaHpiSessionIdT  SessionId,
2948
 
        SAHPI_IN SaHpiResourceIdT ResourceId,
2949
 
        SAHPI_IN SaHpiPowerStateT State)
2950
9 
{
2951
9 
        SaErrorT rv;
2952
 
        SaErrorT (*set_power_state)(void *hnd, SaHpiResourceIdT id,
2953
9 
                                    SaHpiPowerStateT state);
2954
9 
        SaHpiRptEntryT *res;
2955
9 
        struct oh_handler *h;
2956
9 
        SaHpiDomainIdT did;
2957
9 
        struct oh_domain *d = NULL;
2958
 
2959
9 
        if (!oh_lookup_powerstate(State)) {
2960
1 
                return SA_ERR_HPI_INVALID_PARAMS;
2961
 
        }
2962
 
2963
8 
        OH_CHECK_INIT_STATE(SessionId);
2964
7 
        OH_GET_DID(SessionId, did);
2965
7 
        OH_GET_DOMAIN(did, d); /* Lock domain */
2966
7 
        OH_RESOURCE_GET(d, ResourceId, res);
2967
 
2968
6 
        if (!(res->ResourceCapabilities & SAHPI_CAPABILITY_POWER)) {
2969
0 
                oh_release_domain(d); /* Unlock domain */
2970
0 
                return SA_ERR_HPI_CAPABILITY;
2971
 
        }
2972
 
2973
6 
        OH_HANDLER_GET(d, ResourceId, h);
2974
6 
        oh_release_domain(d); /* Unlock domain */
2975
 
2976
6 
        set_power_state = h->abi->set_power_state;
2977
6 
        if (!set_power_state) {
2978
0 
                return SA_ERR_HPI_INVALID_CMD;
2979
 
        }
2980
 
2981
6 
        rv = set_power_state(h->hnd, ResourceId, State);
2982
 
2983
6 
        return rv;
2984
 
}
2985
 
2986
 
2987