iPXE
job.c
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2007 Michael Brown <mbrown@fensystems.co.uk>.
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License as
6  * published by the Free Software Foundation; either version 2 of the
7  * License, or any later version.
8  *
9  * This program is distributed in the hope that it will be useful, but
10  * WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  * General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
17  * 02110-1301, USA.
18  *
19  * You can also choose to distribute this program under the terms of
20  * the Unmodified Binary Distribution Licence (as given in the file
21  * COPYING.UBDL), provided that you have satisfied its requirements.
22  */
23 
24 FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
25 
26 #include <string.h>
27 #include <errno.h>
28 #include <ipxe/job.h>
29 
30 /** @file
31  *
32  * Job control interfaces
33  *
34  */
35 
36 /**
37  * Get job progress
38  *
39  * @v intf Object interface
40  * @v progress Progress data to fill in
41  * @ret ongoing_rc Ongoing job status code (if known)
42  */
43 int job_progress ( struct interface *intf, struct job_progress *progress ) {
44  struct interface *dest;
45  job_progress_TYPE ( void * ) *op =
47  void *object = intf_object ( dest );
48  int ongoing_rc;
49 
50  DBGC ( INTF_COL ( intf ), "INTF " INTF_INTF_FMT " job_progress\n",
51  INTF_INTF_DBG ( intf, dest ) );
52 
53  /* Initialise progress to zero */
54  memset ( progress, 0, sizeof ( *progress ) );
55 
56  if ( op ) {
57  ongoing_rc = op ( object, progress );
58  } else {
59  /* Default is to leave progress as zero and have no
60  * known return status code.
61  */
62  ongoing_rc = 0;
63  }
64 
65  intf_put ( dest );
66  return ongoing_rc;
67 }
#define INTF_INTF_FMT
printf() format string for INTF_INTF_DBG()
Definition: interface.h:297
Error codes.
#define INTF_INTF_DBG(intf, dest)
printf() arguments for representing an object interface pair
Definition: interface.h:306
FILE_LICENCE(GPL2_OR_LATER_OR_UBDL)
#define INTF_COL(intf)
Find debugging colourisation for an object interface.
Definition: interface.h:281
#define DBGC(...)
Definition: compiler.h:505
void * intf_object(struct interface *intf)
Get pointer to object containing object interface.
Definition: interface.c:159
struct interface * intf
Original interface.
Definition: interface.h:158
An object interface.
Definition: interface.h:124
static void * dest
Definition: strings.h:176
Job progress.
Definition: job.h:15
#define job_progress_TYPE(object_type)
Definition: job.h:37
Job control interfaces.
static uint16_t struct vmbus_xfer_pages_operations * op
Definition: netvsc.h:327
void intf_put(struct interface *intf)
Decrement reference count on an object interface.
Definition: interface.c:149
int job_progress(struct interface *intf, struct job_progress *progress)
Get job progress.
Definition: job.c:43
String functions.
#define intf_get_dest_op(intf, type, dest)
Get object interface destination and operation method.
Definition: interface.h:269
void * memset(void *dest, int character, size_t len) __nonnull