003 File Manager
Current Path:
/usr/src/stand/efi/libefi
usr
/
src
/
stand
/
efi
/
libefi
/
📁
..
📄
Makefile
(1.61 KB)
📄
Makefile.depend
(191 B)
📄
delay.c
(1.45 KB)
📄
devicename.c
(5.1 KB)
📄
devpath.c
(18.29 KB)
📄
efi_console.c
(30.17 KB)
📄
efi_driver_utils.c
(2.82 KB)
📄
efichar.c
(4.13 KB)
📄
efienv.c
(3.32 KB)
📄
efihttp.c
(20.3 KB)
📄
efinet.c
(12.24 KB)
📄
efipart.c
(28.42 KB)
📄
efizfs.c
(3.17 KB)
📄
env.c
(29.25 KB)
📄
errno.c
(3.4 KB)
📄
handles.c
(3 KB)
📄
libefi.c
(2 KB)
📄
time.c
(6.67 KB)
📄
time_event.c
(2.08 KB)
📄
wchar.c
(2.09 KB)
Editing: handles.c
/*- * Copyright (c) 2006 Marcel Moolenaar * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include <sys/cdefs.h> __FBSDID("$FreeBSD$"); #include <efi.h> #include <efilib.h> struct entry { EFI_HANDLE handle; EFI_HANDLE alias; struct devsw *dev; int unit; uint64_t extra; }; struct entry *entry; int nentries; int efi_register_handles(struct devsw *sw, EFI_HANDLE *handles, EFI_HANDLE *aliases, int count) { size_t sz; int idx, unit; idx = nentries; nentries += count; sz = nentries * sizeof(struct entry); entry = (entry == NULL) ? malloc(sz) : realloc(entry, sz); if (entry == NULL) return (ENOMEM); for (unit = 0; idx < nentries; idx++, unit++) { entry[idx].handle = handles[unit]; if (aliases != NULL) entry[idx].alias = aliases[unit]; else entry[idx].alias = NULL; entry[idx].dev = sw; entry[idx].unit = unit; } return (0); } EFI_HANDLE efi_find_handle(struct devsw *dev, int unit) { int idx; for (idx = 0; idx < nentries; idx++) { if (entry[idx].dev != dev) continue; if (entry[idx].unit != unit) continue; return (entry[idx].handle); } return (NULL); } int efi_handle_lookup(EFI_HANDLE h, struct devsw **dev, int *unit, uint64_t *extra) { int idx; for (idx = 0; idx < nentries; idx++) { if (entry[idx].handle != h && entry[idx].alias != h) continue; if (dev != NULL) *dev = entry[idx].dev; if (unit != NULL) *unit = entry[idx].unit; if (extra != NULL) *extra = entry[idx].extra; return (0); } return (ENOENT); } int efi_handle_update_dev(EFI_HANDLE h, struct devsw *dev, int unit, uint64_t guid) { int idx; for (idx = 0; idx < nentries; idx++) { if (entry[idx].handle != h) continue; entry[idx].dev = dev; entry[idx].unit = unit; entry[idx].alias = NULL; entry[idx].extra = guid; return (0); } return (ENOENT); }
Upload File
Create Folder