~ubuntu-branches/ubuntu/trusty/grub2/trusty

« back to all changes in this revision

Viewing changes to debian/grub-extras/disabled/gpxe/src/include/gpxe/process.h

  • Committer: Package Import Robot
  • Author(s): Colin Watson
  • Date: 2014-01-16 15:18:04 UTC
  • mfrom: (17.6.38 experimental)
  • Revision ID: package-import@ubuntu.com-20140116151804-3foouk7fpqcq3sxx
Tags: 2.02~beta2-2
* Convert patch handling to git-dpm.
* Add bi-endian support to ELF parser (Tomohiro B Berry).
* Adjust restore_mkdevicemap.patch to mark get_kfreebsd_version as static,
  to appease "gcc -Werror=missing-prototypes".
* Cherry-pick from upstream:
  - Change grub-macbless' manual page section to 8.
* Install grub-glue-efi, grub-macbless, grub-render-label, and
  grub-syslinux2cfg.
* grub-shell: Pass -no-pad to xorriso when building floppy images.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#ifndef _GPXE_PROCESS_H
 
2
#define _GPXE_PROCESS_H
 
3
 
 
4
/** @file
 
5
 *
 
6
 * Processes
 
7
 *
 
8
 */
 
9
 
 
10
FILE_LICENCE ( GPL2_OR_LATER );
 
11
 
 
12
#include <gpxe/list.h>
 
13
#include <gpxe/refcnt.h>
 
14
#include <gpxe/tables.h>
 
15
 
 
16
/** A process */
 
17
struct process {
 
18
        /** List of processes */
 
19
        struct list_head list;
 
20
        /**
 
21
         * Single-step the process
 
22
         *
 
23
         * This method should execute a single step of the process.
 
24
         * Returning from this method is isomorphic to yielding the
 
25
         * CPU to another process.
 
26
         */
 
27
        void ( * step ) ( struct process *process );
 
28
        /** Reference counter
 
29
         *
 
30
         * If this interface is not part of a reference-counted
 
31
         * object, this field may be NULL.
 
32
         */
 
33
        struct refcnt *refcnt;
 
34
};
 
35
 
 
36
extern void process_add ( struct process *process );
 
37
extern void process_del ( struct process *process );
 
38
extern void step ( void );
 
39
 
 
40
/**
 
41
 * Initialise process without adding to process list
 
42
 *
 
43
 * @v process           Process
 
44
 * @v step              Process' step() method
 
45
 */
 
46
static inline __attribute__ (( always_inline )) void
 
47
process_init_stopped ( struct process *process,
 
48
                       void ( * step ) ( struct process *process ),
 
49
                       struct refcnt *refcnt ) {
 
50
        INIT_LIST_HEAD ( &process->list );
 
51
        process->step = step;
 
52
        process->refcnt = refcnt;
 
53
}
 
54
 
 
55
/**
 
56
 * Initialise process and add to process list
 
57
 *
 
58
 * @v process           Process
 
59
 * @v step              Process' step() method
 
60
 */
 
61
static inline __attribute__ (( always_inline )) void
 
62
process_init ( struct process *process,
 
63
               void ( * step ) ( struct process *process ),
 
64
               struct refcnt *refcnt ) {
 
65
        process_init_stopped ( process, step, refcnt );
 
66
        process_add ( process );
 
67
}
 
68
 
 
69
/** Permanent process table */
 
70
#define PERMANENT_PROCESSES __table ( struct process, "processes" )
 
71
 
 
72
/**
 
73
 * Declare a permanent process
 
74
 *
 
75
 * Permanent processes will be automatically added to the process list
 
76
 * at initialisation time.
 
77
 */
 
78
#define __permanent_process __table_entry ( PERMANENT_PROCESSES, 01 )
 
79
 
 
80
#endif /* _GPXE_PROCESS_H */