1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 /* 22 * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 23 * Use is subject to license terms. 24 */ 25 26 #ifndef _LIBGRUBMGMT_H 27 #define _LIBGRUBMGMT_H 28 29 #include <sys/types.h> 30 #include <sys/param.h> 31 #include <sys/mntent.h> 32 #include <sys/uadmin.h> 33 #include <libzfs.h> 34 35 #ifdef __cplusplus 36 extern "C" { 37 #endif 38 39 #define GRUB_ENTRY_DEFAULT -1 /* Use the default entry */ 40 41 /* 42 * Data structure for describing the GRUB menu 43 */ 44 typedef struct grub_menu grub_menu_t; 45 typedef struct grub_line grub_line_t; 46 typedef struct grub_entry grub_entry_t; 47 48 /* 49 * Data structure for describing the file system where the 50 * GRUB menu resides 51 */ 52 typedef struct grub_fsdesc { 53 int gfs_is_tmp_mounted; /* is temporary mounted */ 54 char gfs_dev[MAXNAMELEN]; /* device/zfs dataset to mount */ 55 char gfs_mountp[MAXPATHLEN]; /* mount point */ 56 } grub_fsdesc_t; 57 58 /* 59 * Data structure for collecting data for Fast Reboot 60 */ 61 typedef struct grub_boot_args { 62 grub_fsdesc_t gba_fsd; 63 int gba_kernel_fd; 64 char gba_kernel[BOOTARGS_MAX]; 65 char gba_module[BOOTARGS_MAX]; 66 char gba_bootargs[BOOTARGS_MAX]; 67 } grub_boot_args_t; 68 69 /* 70 * Wrapper functions for retriving boot arguments for Fast Reboot. 71 * grub_get_boot_args() calls grub_menu_init() and grub_menu_fini(). 72 * If menupath is NULL, it will use 'currently active' GRUB menu file. 73 * 74 * All _get_boot_args functions will mount the root file system for the 75 * given entry if not mounted, and open and validate the kernel file. 76 * Caller must allocate bargs, and call grub_cleanup_boot_args() to 77 * clean up mount points and open file handles when done. 78 * 79 * grub_get_boot_args: 80 * Collects boot argument from the specified GRUB menu entry. 81 * If entrynum == -1, default GRUB menu entry will be used. 82 * 83 * grub_cleanup_boot_args: 84 * Cleans up and releases all the resources allocated by 85 * grub_get_boot_args. Closes kernel file. Umounts root file 86 * system if temporarily mounted. 87 */ 88 extern int grub_get_boot_args(grub_boot_args_t *bargs, const char *menupath, 89 int entrynum); 90 extern void grub_cleanup_boot_args(grub_boot_args_t *bargs); 91 92 extern const char *grub_strerror(int); 93 94 #ifdef __cplusplus 95 } 96 #endif 97 98 #endif /* _LIBGRUBMGMT_H */ 99